質問

私は持っています startApplicationService アクティビティのメソッド。したがって、アラームマネージャーがいます。 startApplicationService メソッドはバックグラウンドサービスを呼び出しています。その方法を使用/呼び出したい onReceive アラームマネージャーからの方法。どうやってするの?私を助けてください。 :)

編集:アラームマネージャーの追加クラス:

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);
    }
}

そして、これが私のものです startApplicationService 方法: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();
    }
}

私はコンテキストからアクティビティを取得しました。しかし、それは不可能です。 :(。言う方法はありますか call startApplicationService method to activity アラームマネージャーから?

すべてのアドバイスをありがとう。

ゼック

役に立ちましたか?

解決

いいえ...あなたが呼びかけようとしている活動があなたのときに存在するという保証がないからです onReceive() 呼ばれています。

あなたができることはそれを始めることです Activity を使用して Intent 発信者があなたであることを示す追加で BroadcastReceiver. 。その後、アクティビティはその追加を確認して、メソッドを呼び出すことができます。

しかし、あなたがやりたいと思われることを考えると。一緒に行くことをお勧めします Service. 。とにかくバックグラウンドで作業を行っているので、アクティビティでそれをやりたい理由はありません(もちろん、ここに表示されない正当な理由がない限り)。

私の答えを見てください ここ 似たようなものの例として。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top