2016-06-16 14 views
0

通知を指定した時刻に配信したいと思いましたが、通知をアプリから閉じると通知がまったく配信されませんでした。私はそれを理解する方法を知らない。誰かが、アプリが閉鎖されていても(強制閉鎖でなくても)、デバイスが起動していても、通知を送信する最善の方法を教えてください。アプリが死んでも毎日通知を配信する最も良い方法は何ですか

ご協力いただければ幸いです。ここ

コードである、

alarmrecieverクラス、

public class AlarmReciever extends BroadcastReceiver { 

String meaning; 
String word; 

Context context; 

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

this.context=context; 
    FileIO fileIO=new FileIO(context); 

    String res=fileIO.readFile("daily_word"); 
    StringTokenizer stringTokenizer = new StringTokenizer(res,"---"); 
    word = stringTokenizer.nextToken(); 
    meaning = stringTokenizer.nextToken(); 

    fileIO.writeFile(word+"---"+meaning,"sent_word"); 

    int ch= word.charAt(0); 
    if(ch>=65 && ch<=90) 
    { 
    } 
    else 
     ch=ch-32; 

    word=(char)ch+word.substring(1); 

    produceNotificatioon(context); 

    System.out.println("<> ALARM RECEiVE"); 



} 




public void produceNotificatioon(Context context) 
{ 
    NotificationCompat.Builder notificationBuilder=new NotificationCompat.Builder(context); 
    notificationBuilder.setAutoCancel(true) 
      .setSound(Settings.System.DEFAULT_NOTIFICATION_URI) 
      .setDefaults(Notification.DEFAULT_LIGHTS) 
      .setContentTitle("Word of the Day") 
      .setContentText("Today's Word is "+word) 
      .setSmallIcon(R.drawable.app_icon_2); 

    Intent myintent = new Intent(context,WordOfTheDay.class); 

    TaskStackBuilder taskStackBuilder=TaskStackBuilder.create(context); 

    taskStackBuilder.addParentStack(WordOfTheDay.class); 
    taskStackBuilder.addNextIntent(myintent); 



    PendingIntent pendingIntent=taskStackBuilder.getPendingIntent(102,PendingIntent.FLAG_UPDATE_CURRENT); 

    notificationBuilder.setContentIntent(pendingIntent); 

    NotificationManager notificationManager=(NotificationManager)context.getSystemService(Context.NOTIFICATION_SERVICE); 
    notificationManager.notify(0,notificationBuilder.build()); 


} 

}

setAlarm法、下

public void setAlarm() 
{ 
    Intent myintent=new Intent(this,AlarmReciever.class); 


    alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); 


    PendingIntent pendingIntent=PendingIntent.getBroadcast(this,101,myintent,PendingIntent.FLAG_UPDATE_CURRENT); 

    alarmManager.cancel(pendingIntent); 
    Calendar calendar=Calendar.getInstance(); 
    calendar.setTimeInMillis(System.currentTimeMillis()); 
    calendar.set(Calendar.HOUR_OF_DAY, NotificationTime.getInt("hour", 12)); 
    calendar.set(Calendar.MINUTE, NotificationTime.getInt("min", 0)); 
    calendar.set(Calendar.SECOND, 0); 


    if(calendar.before(Calendar.getInstance())) 
     calendar.add(Calendar.DATE,1); 


    alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), 
      AlarmManager.INTERVAL_DAY 
      , pendingIntent); 


    System.out.println("ALARM SET STATUS"); 
} 

OnCreate関数コードの一部、

あります
  if(checkFirstRun()) { 

      createAlert createAlert=new createAlert(this); 
      createAlert.createDialog(); 



      setDaily_word(); 

      setAlarm(); 
      System.out.println("ALARM SET STATUS on FIRST RUN"); 
     } 

それはアプリを最初に実行された場合、私はそうでなければ、私はアラームを設定することのいずれかここでサービスのonCreate()メソッド

を使用してのtimepickerを使用しています、アラームを設定していますが、ここで

public class ServiceClass extends Service { 
@Nullable 
@Override 
public IBinder onBind(Intent intent) { 
    return null; 
} 

@Override 
public void onStart(Intent intent, int startId) { 


    System.out.println("class Service started"); 
} 

@Override 
public void onTaskRemoved(Intent rootIntent) { 

    System.out.println("class Service on TaskRemoved"); 
    // setAlarm(); 

    // onCreate(); 
    System.out.println("class Service on Alarm reset oncreate"); 
    super.onTaskRemoved(rootIntent); 
} 

@Override 
public void onCreate() { 

    System.out.println("class Service created"); 
    setAlarm(); // this work if I start my application just after it is being cleared from recent apps 
    super.onCreate(); 
} 
} 

、サービスクラスでありますノーならば私は、これらの権限

 <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
<uses-permission android:name="android.permission.INTERNET" /> 
..... 
    <receiver android:name=".AlarmReciever" android:process=":remote"/> 
    <service android:name=".ServiceClass"/> 

答えて

1
  1. を使用しています私のマニフェストファイル、 ですそれは0~15分の範囲であり、プッシュ送達の性質は正確なタイミングを保証することができない。

  2. あなたのアプリによってローカルで通知が生成される場合は、AlarmManagerを使用してan intent to start BroadcastReceiverをトリガーしてcreation of notificationをスケジュールすることができます。

+0

私は既にブロードキャスト受信機でアラームを作成しました。しかし、問題は、アプリが最近のアプリから消去されるか、殺されたときにアラームが表示されないことです。私はアプリが開かれるたびにアラームをリセットすることができます。しかし、アプリがrecentsから削除されるまで、アラームは動作しません。 – ss007

+0

アラームマネージャを使用してインテントをスケジュールする方法と、どのように対処しますか?それは疑問を明確にするのに役立ちます。 –

+0

私はコードを更新しました。見てください – ss007

関連する問題