7

マニフェスト ファイルで、レシーバーを宣言しました。(次のように)

<receiver android:name=".OnAlarmReceive" />

ただし、アプリケーションをシャットダウンすると、アラームと通知を受け取ることができません。OnReceiveどうやら、私の中での呼び出しBroadcast receiverは決して行われません。

public class OnAlarmReceive extends BroadcastReceiver
{
@Override
public void onReceive(Context context, Intent arg1)
   {
       //various stuff
   }
}

MainActivity 内のアラーム マネージャー クラスは次のとおりです。

AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
    Intent intent = new Intent("MY_ALARM_NOTIFICATION");
    intent.setClass(this, OnAlarmReceive.class);
    intent.putExtra("message", message);
    PendingIntent pendingIntent = PendingIntent
            .getBroadcast(MainActivity.this, 0, intent,
                    PendingIntent.FLAG_UPDATE_CURRENT);

    Calendar timeCal = Calendar.getInstance();
    timeCal.set(Calendar.HOUR_OF_DAY, hour);
    timeCal.set(Calendar.MINUTE, minutes);

    alarmManager.set(AlarmManager.RTC_WAKEUP, timeCal.getTimeInMillis(), pendingIntent);

そして私のマニフェストは次のとおりです:

    <receiver android:name=".OnAlarmReceive">
    <intent-filter android:priority="1">  
        <action android:name="MY_ALARM_NOTIFICATION"/>  
    </intent-filter>  
</receiver>  

アプリを終了しても通知/アラームを受け取るにはどうすればよいですか。バックグラウンド サービス ?

4

6 に答える 6

0

あなたのコードは正常に動作しています!

この行を変更するだけです。

alarmManager.set(AlarmManager.RTC_WAKEUP, timeCal.getTimeInMillis(),
pendingIntent);

この行で:

alarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, 
SystemClock.elapsedRealtime() + 5000, pendingIntent);

また、「onReceive」のコードは、アプリが実行されていない場合でも、5000 ミリ秒 (5 秒) 後に実行されます。

于 2013-12-31T00:01:21.173 に答える
0

Gong Cong が言うように、レシーバーがリッスンするイベントを宣言する必要があります。

例えば ​​:

<receiver android:name=".OnAlarmReceive"> 

<intent-filter>  
    <action android:name="MY_ALARM_NOTIFICATION"/>
</intent-filter> </receiver> 

次に、アラームを設定するときに、アクションでインテントを使用します。

Intent intent = new Intent("MY_ALARM_NOTIFICATION");
intent.addFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES);
PendingIntent pi = PendingIntent.getBroadcast( this, 0, intent, 0 );
于 2013-05-06T09:03:13.070 に答える
-1

1.マニフェスト ファイルで受信者を宣言します。

<receiver android:name="your.package.name.TestAlarmReceiver"></receiver>

Android システム全体で大文字と小文字が区別されることに常に注意してください。そのため、AndroidMainfest.xml でスペルが正しいことを確認してください。

2.レシーバー用にを作成する場合は、乱数であっても -PendingIntentを追加してください。コードがrequestCodeなければ呼び出されることはありません!onReceive

開始する関数は次のAlarmManagerようになります。

public static void scheduleTestAlarmReceiver(Context context) {
   Intent receiverIntent = new Intent(context, TestAlarmReceiver.class);
   PendingIntent sender = PendingIntent.getBroadcast(context, 123456789,  receiverIntent, 0);

   AlarmManager alarmManager = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
   alarmManager.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime()+startDelay, someDelay, sender);
}

BroadcastReceiver クラス:

package your.package.name;

public class TestAlarmReceiver extends BroadcastReceiver {
   @Override
   public void onReceive(Context context, Intent arg1) {
     // your code here!
   }
}

元の記事:なぜ私の BroadcastReceiver が呼び出されないのですか?

于 2016-02-17T12:51:50.100 に答える