Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/226.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android AlarmManager有时不开火_Android_Alarmmanager_Android Notifications - Fatal编程技术网

Android AlarmManager有时不开火

Android AlarmManager有时不开火,android,alarmmanager,android-notifications,Android,Alarmmanager,Android Notifications,奇怪的是,我的应用程序有成千上万的用户,对他们中的大多数人来说,这是完美的。比如说,有5%的人遇到了导致提醒不能被触发的问题 我已经将日志记录放在调度机制上,包括调度的时间戳,因此我知道提醒已调度,但没有调用AlarmReceiver 为什么经理有时不开枪 提醒逻辑.java- public class ReminderLogic { public static void schedule() { AlarmManager alarmManager = (AlarmMa

奇怪的是,我的应用程序有成千上万的用户,对他们中的大多数人来说,这是完美的。比如说,有5%的人遇到了导致提醒不能被触发的问题

我已经将日志记录放在调度机制上,包括调度的时间戳,因此我知道提醒已调度,但没有调用AlarmReceiver

为什么经理有时不开枪

提醒逻辑.java-

public class ReminderLogic {

    public static void schedule() {
        AlarmManager alarmManager = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);

        Intent intent = new Intent(context, AlarmReceiver.class);
        PendingIntent alarmIntent = PendingIntent.getBroadcast(context, 0, intent, 0);

        int timeMillis = ... // some calculation

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) 
            alarmManager.setExact(AlarmManager.RTC_WAKEUP, timeMillis, alarmIntent);
        else 
            alarmManager.set(AlarmManager.RTC_WAKEUP, timeMillis, alarmIntent);
    }
}
AlarmReceiver.java-

public class AlarmReceiver extends WakefulBroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        Intent service = new Intent(context, AlarmService.class);
        startWakefulService(context, service);
    }   
}
public class BootReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        ReminderLogic.schedule();
    }

}
public class PackageReplaceReceiver extends BroadcastReceiver {

    private static final String TAG = "BootReceiver";

    @Override
    public void onReceive(Context context, Intent intent) {
        ReminderLogic.schedule();
    }

}
AlarmService.java-

public class AlarmService extends IntentService {
    private final static String TAG = "AlarmService";

    public AlarmService() {
        super(TAG);
    }

    @Override
    protected void onHandleIntent(Intent intent) {
        ReminderLogic.schedule();

        AlarmReceiver.completeWakefulIntent(intent);
    }
}
BootReceiver.java-

public class AlarmReceiver extends WakefulBroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        Intent service = new Intent(context, AlarmService.class);
        startWakefulService(context, service);
    }   
}
public class BootReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        ReminderLogic.schedule();
    }

}
public class PackageReplaceReceiver extends BroadcastReceiver {

    private static final String TAG = "BootReceiver";

    @Override
    public void onReceive(Context context, Intent intent) {
        ReminderLogic.schedule();
    }

}
packagerplacereceiver.java-

public class AlarmReceiver extends WakefulBroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        Intent service = new Intent(context, AlarmService.class);
        startWakefulService(context, service);
    }   
}
public class BootReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        ReminderLogic.schedule();
    }

}
public class PackageReplaceReceiver extends BroadcastReceiver {

    private static final String TAG = "BootReceiver";

    @Override
    public void onReceive(Context context, Intent intent) {
        ReminderLogic.schedule();
    }

}
AndroidManifest.xml-

    <service android:name=".reminders.AlarmService" />
    <receiver android:name=".reminders.AlarmReceiver" />

    <receiver
        android:name=".reminders.BootReceiver"
        android:exported="true" >
        <intent-filter>
            <action android:name="android.intent.action.BOOT_COMPLETED" />
        </intent-filter>
    </receiver>
    <receiver
        android:name=".reminders.PackageReplaceReceiver"
        android:exported="true" >
        <intent-filter>
            <action android:name="android.intent.action.MY_PACKAGE_REPLACED" />
        </intent-filter>
    </receiver>


这5%的用户可能有任何taskManager在警报响起之前杀死你的应用程序。例如,华为设备有自己的节能装置,应用程序必须受到保护才能不被杀死……哦,非常有趣,确实有一些用户抱怨华为。你知道如何保护一个应用程序不被杀掉吗?抱歉,没有。我也搜索过那个案例,但没有根是不可能的。唯一的方法就是告知用户。特别是对于whatsApp,我可以看到这在我的华为中是自动保护的,但我认为这是在能源管理器内部实现的。谢谢,我将尝试与我的客户核实这一点。