Alarm Managerからアクティビティの関数を呼び出す方法
-
26-10-2019 - |
質問
私は持っています 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
. 。とにかくバックグラウンドで作業を行っているので、アクティビティでそれをやりたい理由はありません(もちろん、ここに表示されない正当な理由がない限り)。
私の答えを見てください ここ 似たようなものの例として。