6

私のマニフェストファイルで、受信者を宣言しました。私は自分のアプリケーションをシャットダウンした後アプリが実行されていないときにBroadcastReceiverが動作しない

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

(次のように)しかし、私はアラームと通知を取得することはできませんよ。明らかに、私のBroadcast receiverOnReceiveへの呼び出しは行われません。

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> 

私は私のアプリを遮断した場合でも、通知/アラームを受信するために何をすべき。バックグラウンドサービス?

答えて

0

功コングがあなたの受信機が待ち受けるイベント宣言する必要があり、言うように、あなたは

receiver android:name=".SmsBroadCastReceiver"> 
     <intent-filter android:priority="20"> 
      <action android:name="android.provider.Telephony.SMS_RECEIVED"/> 
     </intent-filter> 
    </receiver> 
+1

アラーム受信の場合と同じですか?あなたが与えたものはSMSのためです – tony9099

0

として、マニフェストに意図-フィルタを追加する必要があります。例えば

:その後、

<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); 
+0

私はそれをしました。 しかし、いったん私の活動を止めると、アラームは消えません。上記のコードを実行しているアプリケーションでは(変更した後でも)機能します。しかし、私は(タスクマネージャから)アプリケーションを削除する瞬間、それは実行されません。 – tony9099

+0

コードの一部を投稿できますか?どのようにアラームを設定しますか? AlarmManager.RTC_WAKEUPフラグを使用していますか? –

+0

はい、私はこれのように、私はインテントではなく、マニフェストの放送受信機ではなく、アクティビティを呼び出すことはないので、インテントと余分なものを置くことはできません? – tony9099

0

あなたのコードが正常に動作しています!このラインでは

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

あなたがしなければならないのは、この行を変更することです

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

そして「onReceive」のコード5000ms後に実行されます(5秒)場合でも、アプリは

-1

1.Declareマニフェスト・ファイル内の受信機を実行していない:

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

Android-System全体で大文字と小文字が区別されることを常に忘れないでください。だから、あなたのスペルが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! 
    } 
} 

元記事:私の理解でWhy my BroadcastReceiver does not get called?

0

、いくつかのケースに入れに応じてInをOSはアラーム設定時間を調整する権限を持っています。そのため、AlarmManager.set(...)、AlarmManager.setexact(...)などを使用してください。製造元(カスタムAndroid OS)によっては、OSが火災報知機機機器を閉鎖している可能性があります。

0

マニフェストファイルの受信者にandroid:exported="true"を追加すると、アプリケーションがシャットダウンしても(意図的にタスクリストからアプリを削除していても)アラームを受信しやすくなりました。

関連する問題