通知を指定した時刻に配信したいと思いましたが、通知をアプリから閉じると通知がまったく配信されませんでした。私はそれを理解する方法を知らない。誰かが、アプリが閉鎖されていても(強制閉鎖でなくても)、デバイスが起動していても、通知を送信する最善の方法を教えてください。アプリが死んでも毎日通知を配信する最も良い方法は何ですか
ご協力いただければ幸いです。ここ
コードである、
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"/>
私は既にブロードキャスト受信機でアラームを作成しました。しかし、問題は、アプリが最近のアプリから消去されるか、殺されたときにアラームが表示されないことです。私はアプリが開かれるたびにアラームをリセットすることができます。しかし、アプリがrecentsから削除されるまで、アラームは動作しません。 – ss007
アラームマネージャを使用してインテントをスケジュールする方法と、どのように対処しますか?それは疑問を明確にするのに役立ちます。 –
私はコードを更新しました。見てください – ss007