2016-10-11 10 views
1

特定の時間にユーザーに表示するためのアプリ内通知がありますが、アプリが終了しても何も表示されません。アプリケーションが閉じられたときにAlarmManagerが起動されない

設定アラーム:

Intent alarmIntent = new Intent(mMotherActivity, ReminderAlarmManager.class); 

if (ReminderNotificationType.CHANGE_LENS.equals(notificationType)) { 
    alarmIntent.putExtra("NOTIFICATION_TYPE", "REMINDER"); 
} else { 
    alarmIntent.putExtra("NOTIFICATION_TYPE", "ORDER"); 
} 

long scTime = alarmDate.getTime(); 
PendingIntent pendingIntent = PendingIntent.getBroadcast(mMotherActivity, 0, alarmIntent, 0); 
AlarmManager alarmManager = (AlarmManager) mMotherActivity.getSystemService(mMotherActivity.ALARM_SERVICE); 
alarmManager.set(AlarmManager.RTC_WAKEUP, scTime, pendingIntent); 

放送受信機:それはscTimeに来るとき

public class ReminderAlarmManager extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 

     String notificationType = intent.getStringExtra("NOTIFICATION_TYPE"); 
     if(notificationType.equalsIgnoreCase("ORDER")) 
     { 
      Intent i = new Intent(context, OrderReminderNotificationService.class); 
      context.startService(i); 
     } 
     else if(notificationType.equalsIgnoreCase("REMINDER")) 
     { 
      Intent i = new Intent(context, ReminderNotificationService.class); 
      context.startService(i); 
     } 
    } 
} 

ので、アプリケーションを閉じても、私は通知をトリガしたいと思います。

<receiver android:name="com.company.utils.ReminderAlarmManager"> 
    <intent-filter> 
     <action android:name="android.intent.action.BOOT_COMPLETED" /> 
    </intent-filter> 
</receiver> 

しかし、何も現れません...私が間違って何をやっている:

public class OrderReminderNotificationService extends IntentService { 

    public OrderReminderNotificationService(String name) { 
     super(name); 
    } 

    @Override 
    protected void onHandleIntent(Intent intent) { 

     String ns = Context.NOTIFICATION_SERVICE; 
     NotificationManager mNotificationManager = (NotificationManager) getSystemService(ns); 

     Context context = getApplicationContext(); 
     NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(
      context); 

     Uri uri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); 
     mBuilder.setContentTitle("Notification"); 
     mBuilder.setContentText(context.getString(R.string.renewOrderNotificationMsg)); 
     mBuilder.setSmallIcon(R.mipmap.ic_launcher); 
     mBuilder.setSound(uri); 
     mBuilder.setAutoCancel(true); 

     Intent notificationIntent = new Intent(this, LoginActivity.class); 
     PendingIntent contentIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0); 
     mBuilder.setContentIntent(contentIntent); 
     mNotificationManager.notify(2, mBuilder.build()); 
} 

ことに関するマニフェストの一部:だから、次のように私は、PendingIntentによるサービスを呼んでいますか?

+0

あなたは 'BroadcastReceiver'からサービスを呼び出していますか? – Marat

+0

完全なコードで投稿を編集しました。私はBroadCastreceiverを掲示し、AlarmManagerの設定を完了しました。私はそのようなBOOT_COMPLETEDのマニフェストで何かをしなければならないでしょうか? –

+0

マニフェストファイルも必要です。私はあなたの 'broadcastReceiver'と' service'をマニフェストに登録しましたか? – Marat

答えて

2

あなたAndroidManifest.xml次のようにする必要があります:

<receiver android:name=".ReminderAlarmManager"> 
    <intent-filter> 
     <action android:name="android.intent.action.BOOT_COMPLETED" /> 
    </intent-filter> 
</receiver> 

<service android:name=".OrderReminderNotificationService "/> 
+1

ちょうどもう1つの質問。 ReceiverをBOOT_COMPLETEDで実行するように指示することによって、devideが起動するときにReceiverが起動されることを理解します。しかし、たとえアプリケーションが閉じていても、アラームマネージャーに一定の時間が過ぎてもアラームを発したいですか?それは正しい方法で動作するはずですか? –

+0

電話がオフになると、すべてのアラームが削除されます。したがって、私たちは 'BOOT_COMPLETED'アクションを持っています。このアクションは、intenr-filterにあるすべての受信者に送信されます。システムが再起動したことがわかったので、アラームをリセットする必要があります。しかし、再起動後にアラームの削除を気にしない場合は、 'BOOT_COMPLETED'でintent-filterを実行する必要はありません。アプリが閉鎖されていてもアラームが発生する – Marat

0

アラームマネージャは、特定の携帯電話上で意思のサービスをトリガしません。 Oneplus 3Tでアプリをテストしていたのですが、コードに間違いがないことが分かりました。 Moto Gで同じアプリをテストしたところ、期待どおりに動作します。

関連する問題