Frage

Ich habe ein startApplicationService Methode in einer Aktivität. Deshalb habe ich einen Alarmmanager. startApplicationService Die Methode ruft den Hintergrunddienst auf. Ich möchte diese Methode in verwenden/aufrufen onReceive Methode von meinem Alarmmanager. Wie es geht? Bitte hilf mir. :)

Bearbeitet: Alarmmanager -Klasse hinzugefügt:

public class WatcherAlarm  extends BroadcastReceiver
{

    private final static String LOG_TAG = WatcherAlarm.class.getSimpleName();
    private AccessActivity activity = null;

    @Override
    public void onReceive(Context context, Intent intent)
    {
        Log.d(LOG_TAG, "-------------------------- WATCHER ALARM ------ ON RECEIVE");
        if(activity != null) {
            activity.startApplicationService(intent.getExtras());
        }
    }

    public void startAlarm(AccessActivity activity, Bundle bundle)
    {
        this.activity = activity;
        AlarmManager alarmManager = (AlarmManager) activity.getSystemService(Context.ALARM_SERVICE);
        Intent i = new Intent(activity, WatcherAlarm.class); // explicit
        i.putExtras(bundle);
        PendingIntent pi = PendingIntent.getBroadcast(activity, 0, i, 0);
        alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), 1000 * 20, pi); // Millisec * Second * Minute
    }

    public void stopAlarm(Context context)
    {
        AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
        Intent i = new Intent(context, WatcherAlarm.class); // explicit
        PendingIntent pi = PendingIntent.getBroadcast(context, 0, i, 0);
        alarmManager.cancel(pi);
    }
}

Und hier ist das meine startApplicationService Methode: Es startet Asynctask.

public void startApplicationService(Bundle bundle)
{
    try {
        task = new ApplicationServiceTask(this);
        requestId = task.execute(bundle).get();
    } catch (InterruptedException e) {
        e.printStackTrace();
    } catch (ExecutionException e) {
        e.printStackTrace();
    }
}

Ich werde versucht, Aktivität aus dem Kontext zu bekommen. Aber es ist nicht möglich. :(. Gibt es eine Möglichkeit zu sagen? call startApplicationService method to activity vom Alarmmanager?

Vielen Dank für jeden Rat.

Zeck

War es hilfreich?

Lösung

Nein ... weil Sie keine Garantie dafür haben, dass die Aktivität, die Sie anrufen möchten, sogar existieren, wenn Ihre onReceive() wird genannt.

Was Sie tun können, ist damit zu beginnen Activity mit an ein Intent mit einem zusätzlichen Angeben, dass der Anrufer Sie sind BroadcastReceiver. Die Aktivität kann dann diese Extra überprüfen und die Methode aufrufen.

Betrachten Sie jedoch, was Sie anscheinend tun möchten. Ich würde empfehlen, mit einem zu gehen Service. Da Sie die Arbeit im Hintergrund sowieso erledigen, sehe ich keinen Grund dafür, dies in einer Aktivität zu tun (es sei denn natürlich, Sie haben einen gültigen Grund, der hier nicht zeigt).

Siehe meine Antwort hier für ein Beispiel für etwas Ähnliches.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top