手机重启后禁用Android AlarmManager

手机重启后禁用Android AlarmManager,android,android-alarms,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,

很抱歉重复同样的问题,但是我阅读了关于这个问题的每一篇文章,并且完全按照他们说的做了,但是我无法让它工作。因此,请阅读我的代码,并在下面说明我做错了什么:

**安排闹钟:**

  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扩展广播:

DeviceBootReceiver在设备引导后重新安排警报

}

显示


您的.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

您需要允许接收方接收来自应用程序外部的消息

我不能让它工作-请解释一下你的意思。还请使用adb shell dumpsys alarm等工具查看您已安排的警报。抱歉,英语不好,请将alarm设置为ring可以完美工作,我只是尝试让它工作,即使在设备重新启动时,您的设备在启动时被调用BootReceiver_COMPLETED??正如@commonware在命令promt.中所说的,请键入adb shell dumpsys alarm>alarmLog.txt。这将在当前路径中生成一个文本文件。在该文件中搜索您的程序包名称,并查看当前活动的AlarmsOrry,我正在真实设备上进行测试,我不知道是否必须加载命令提示符。我已经下载了终端模拟器,无法创建alarmLog.txt只读文件系统。我看到的另一件事是,您可能希望将引导接收器中的标志从PendingEvent.flag\u UPDATE\u CURRENT更改为PendingEvent.flag\u CANCEL\u CURRENT。重新启动设备时,任何挂起的意图都将丢失。因此,在这一点上,你没有什么要更新的。为什么不设置日历的日期部分呢。void setInexactRepeating的第二个参数是警报首次发出的时间(以毫秒为单位)。如果您在当地时间下午12:27后运行代码,则您正在设置过去闹钟第一次响起的时间。仍然不工作…即使在更换标志并添加:calendar.setCalendar.DAY\u OF年,1;
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>
<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