будильник не сбрасывается после перезагрузки

Я разработал новое приложение, которое отображает время для телешоу, и я хочу делать напоминания об этом времени ... это работает хорошо, но после перезагрузки все сигналы тревоги удаляются, тогда я использовал приемник с действием BOOT_COMPLETED, чтобы получить данные из database и сбросить все alarms после перезагрузиться напрямую, но это не работает

это мой код:

manifest.xml

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

BootCompletedReceiver.java

package com.shadatv.shada;

import android.app.AlarmManager;
import android.app.PendingIntent;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.widget.Toast;

public class BootCompletedReceiver extends BroadcastReceiver {

    public DAOTimes timeDatabase;
    Cursor allNotifs;
    AlarmManager am;

    @Override
    public void onReceive(Context context, Intent intent) {
        timeDatabase = new DAOTimes(context);       
        allNotifs = timeDatabase.getAllNotifications();                     

        if (allNotifs.moveToFirst()) {
            do{
                String noPrName = allNotifs.getString(allNotifs.getColumnIndex("_noprname")).toString().trim();
                String noTime = allNotifs.getString(allNotifs.getColumnIndex("_notime")).toString().trim();             

                Intent alarmIntent = new Intent(context, NotAlarm.class);               
                alarmIntent.setAction(noTime);
                alarmIntent.putExtra("nameSelected", noPrName);
                PendingIntent pendingIntent = PendingIntent.getActivity(context, 0,
                        alarmIntent, PendingIntent.FLAG_CANCEL_CURRENT);
                am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
                am.setRepeating(AlarmManager.RTC_WAKEUP, Long.valueOf(noTime),
                        7 * 24 * 60 * 60 * 1000, pendingIntent);

                Toast.makeText(context,
                        "name : " + Long.valueOf(noTime),
                        Toast.LENGTH_LONG).show();
            }while(allNotifs.moveToNext());     
        }
    }
}

NotAlarm.java

package com.shadatv.shada;

import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.widget.Toast;

public class NotAlarm extends BroadcastReceiver {

    NotificationManager nm;

    @Override
    public void onReceive(Context context, Intent intent) {
        // TODO Auto-generated method stub

        NotificationManager nm = (NotificationManager) context
                .getSystemService(Context.NOTIFICATION_SERVICE);

        Notification.Builder builder = new Notification.Builder(context);
        builder.setSmallIcon(android.R.drawable.btn_star);
        builder.setTicker("تذكير");

        Notification notify = builder.getNotification();

        CharSequence title = intent.getExtras().getString("nameSelected");
        CharSequence details = "تذكير - برنامج " + title;

        PendingIntent pending = PendingIntent
                .getActivity(context, 0, new Intent(), 0);
        notify.setLatestEventInfo(context, title, details, pending);

        nm.notify(0, notify);

        Toast.makeText(context,
                "noti : " + title,
                Toast.LENGTH_LONG).show();

    }

}

и для некоторого следа, как вы заметили, я поставил Toast в BootCompletedReceiver.java и в NotAlarm.java

Первый Toast отображается после перезагрузки, а другой нет


person eng.ahmed    schedule 08.04.2013    source источник
comment
Было ли это когда-нибудь решено?   -  person Signcodeindie    schedule 10.04.2013
comment
да я нашел решение   -  person eng.ahmed    schedule 13.04.2013


Ответы (1)


Зарегистрируйте свой ресивер отдельно

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

Напишите такой код

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

а также

 <receiver android:name=".NotAlarm" >
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED" />
            </intent-filter>
    </receiver>
person ravindra.kamble    schedule 08.04.2013
comment
я уже сделал это .. они разделены, но сначала я объявил это без фильтра намерений, и я не хочу запускать его после перезагрузки, но он вызывается BootCompletedReceiver - person eng.ahmed; 08.04.2013