Android Alarm Manager放送レシーバーがマニフェストではなくコードに登録されています

StackOverflow https://stackoverflow.com/questions/3447594

質問

アラームを使用して、特定の時間にコードを実行したいと思います。マニフェストに登録されているブロードキャストレシーバーでアラームを正常に実装しましたが、理解する方法では、この方法はブロードキャストレシーバーに個別のクラスを使用します。

この方法を使用して別のアクティビティを開始できますが、メインアクティビティでメソッドを実行するために使用できますか?

(ブロードキャストレシーバーから実行中のアクティビティに通知するにはどうすればよいですか?)

そのため、上記の回答で説明されているように、私はメインアクティビティにブロードキャストレシーバーを登録しようとしています。

private BroadcastReceiver receiver = new BroadcastReceiver(){
    @Override
    public void onReceive(Context context, Intent intent) {
        Toast.makeText(context, "hello", Toast.LENGTH_SHORT).show();
        uploadDB();         
    }
};    

public void onResume() {
    super.onResume();

    IntentFilter filter = new IntentFilter();
    filter.addAction(null);

    this.registerReceiver(this.receiver, filter);
}

public void onPause() {
    super.onPause();

    this.unregisterReceiver(this.receiver);
}

しかし、私はこれをAlarm Managerと連携させることができませんでしたが、アラームの意図を放送レシーバーにどのようにリンクするべきかについてはわかりません。誰もがアクティビティでアラームマネージャーのブロードキャストレシーバーを動的に登録する例を教えてもらえますか?または、私がこれをどのように行うかを説明しますか?

役に立ちましたか?

解決

これはどう?

Intent startIntent = new Intent("WhatEverYouWant");
PendingIntent startPIntent = PendingIntent.getBroadcast(context, 0, startIntent, 0);
AlarmManager alarm = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
alarm.set(AlarmManager.RTC_WAKEUP, triggerTime, startPIntent);

そして、あなたの中に Manifest.xml ファイル:

<receiver android:name="com.package.YourOnReceiver">
   <intent-filter>
       <action android:name="WhatEverYouWant" />
   </intent-filter>
</receiver>

私が知る限り、あなたはまだマニフェストで受信機を宣言する必要があります。アクティビティ内のプライベートインスタンスに設定できるかどうかはわかりません。アクティビティの内部のreceiveを宣言して、それを呼び出すことができます(BroadcastReceiverにインターフェイスがある場合。

他のヒント

アラームを開始する場所からアラーム意図を開始します。アラームを聞き始めたい場所から以下のコードを書く

Intent myIntent = new Intent(getBaseContext(), **AlarmReceiver**.class);
                PendingIntent pendingIntent = PendingIntent.getBroadcast(getBaseContext(), 0, myIntent, 0);
                AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); 
                Calendar calendar = Calendar.getInstance();
                calendar.setTimeInMillis(System.currentTimeMillis());
                calendar.add(Calendar.MINUTE, shpref.getInt("timeoutint", 30));
                alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntent);

ブロードキャストレシーバーでは、受信したいコードを書きます。そして、メニフェストでは以下に書きます

<receiver android:name=".AlarmReceiver" android:process=":remote"/>

繰り返しアラームも配置することもできます。それが助けてくれることを願っています!

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