手机重启后Android AlarmManager被禁用

时间:2015-04-09 15:01:48

标签: android android-alarms

很抱歉重新发布同样的问题,但我阅读了关于该问题的每一篇文章并完全按照他们的说法行事,但我无法解决问题。所以请阅读我的代码并告诉我下面的错误:

**安排闹钟:**

  public void progr(View v){

    Calendar calendar = Calendar.getInstance();

    //calendar.set(Calendar.DAY_OF_YEAR, 1);
    calendar.set(Calendar.HOUR_OF_DAY, 12); // For 1 PM or 2 PM
    calendar.set(Calendar.MINUTE, 36);
    calendar.set(Calendar.SECOND, 1);
    Long time = calendar.getTimeInMillis();//new GregorianCalendar().getTimeInMillis()+10*1000;


    Intent intentAlarm = new Intent(this, AlarmReciever.class);

    // create the object
    AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);

    //set the alarm for particular time
    alarmManager.setInexactRepeating(AlarmManager.RTC_WAKEUP, time, 5000, PendingIntent.getBroadcast(this, 1, intentAlarm, PendingIntent.FLAG_UPDATE_CURRENT));
    Toast.makeText(this, "Alarm Scheduled for Tommrrow", Toast.LENGTH_LONG).show();


    ComponentName receiver = new ComponentName(context, DeviceBootReceiver.class);
    PackageManager pm = context.getPackageManager();

    pm.setComponentEnabledSetting(receiver,
            PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
            PackageManager.DONT_KILL_APP);

}

Alarmreceiver扩展广播:

public class AlarmReciever extends BroadcastReceiver
{
@Override
public void onReceive(Context context, Intent intent)
{

     {

    NotificationCompat.Builder mBuilder =
            new NotificationCompat.Builder(Main.context)
                    .setLargeIcon(BitmapFactory.decodeResource(Main.context.getResources(), R.mipmap.ic_launcher))
                    .setSmallIcon(R.mipmap.ic_launcher)
                    .setContentTitle("Zall - Notification")
                    .setContentText("Veuillez cliquer pour epargner votre crédit.");

    Intent intentnot = new Intent(Main.context, Main.class);
    intentnot.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    PendingIntent pendingIntent = PendingIntent.getActivity(Main.context, 0, intentnot, 0);

    NotificationManager mNotificationManager =
            (NotificationManager) Main.context.getSystemService(Context.NOTIFICATION_SERVICE);

    int mId = 1234567890;

    Notification mNotification = mBuilder.build();
    mNotification.flags = Notification.FLAG_AUTO_CANCEL;
    mNotification.contentIntent = pendingIntent;
    mNotification.defaults = Notification.DEFAULT_ALL;
    mNotificationManager.notify(mId, mNotification);
    }
}

}

DeviceBootReceiver在设备启动后重新安排闹钟

public class DeviceBootReceiver extends BroadcastReceiver {

@Override
public void onReceive(Context context, Intent intent) {
  {
        Calendar calendar = Calendar.getInstance();;

        //calendar.set(Calendar.DAY_OF_YEAR, 1);
        calendar.set(Calendar.HOUR_OF_DAY, 12); // For 1 PM or 2 PM
        calendar.set(Calendar.MINUTE, 27);
        calendar.set(Calendar.SECOND, 1);
        Long time = calendar.getTimeInMillis();//new GregorianCalendar().getTimeInMillis()+10*1000;

        // create an Intent and set the class which will execute when Alarm triggers, here we have
        // given AlarmReciever in the Intent, the onRecieve() method of this class will execute when
        // alarm triggers and
        //we will write the code to send SMS inside onRecieve() method pf Alarmreciever class
        Intent intentAlarm = new Intent(Main.context, AlarmReciever.class);

        // create the object
        AlarmManager alarmManager = (AlarmManager) Main.context.getSystemService(Context.ALARM_SERVICE);

        //set the alarm for particular time
        alarmManager.setInexactRepeating(AlarmManager.RTC_WAKEUP,time,AlarmManager.INTERVAL_DAY, PendingIntent.getBroadcast(Main.context, 1, intentAlarm, PendingIntent.FLAG_UPDATE_CURRENT));
        Toast.makeText(Main.context, "Alarm Scheduled", Toast.LENGTH_LONG).show();
    }
}

}

清单

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.exercicesextrasapks.onezero.intussd" >



<uses-permission android:name="android.alarm.permission.SET_ALARM"/>
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>


<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
    <activity
        android:name=".Main"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>



    <receiver  android:name=".AlarmReciever">

    </receiver>
    <receiver android:enabled="false" android:name=".DeviceBootReceiver">
        <intent-filter>
            <action android:name="android.intent.action.BOOT_COMPLETED"/>
        </intent-filter>
    </receiver>


</application>

1 个答案:

答案 0 :(得分:0)

.DeviceBootReceiver的接收器应该如下所示

<receiver android:name=".DeviceBootReceiver" android:enabled="true" android:exported="true">
    <intent-filter>
        <action android:name="android.intent.action.BOOT_COMPLETED"/>
    </intent-filter>
</receiver> code here

您需要允许接收方从应用程序之外的内容接收消息。 Read this for more information