我要建立一個報警功能的應用程序,提醒病人按時吃藥。報警管理器沒有觸發廣播接收器
但目前的問題是報警管理器沒有在小米手機上觸發,它在Android 6.0中的三星note4上工作。在將代碼實現到我的項目之前,我創建了一個新項目並使用相同的代碼來測試它。在新項目中,只要Autostart權限具有授權,代碼就能正常工作。警報會及時觸發,甚至重新啓動手機,引導接收器也將重新生成警報,但它只在我的應用程序上無法使用。
現在下面是我的代碼。
OnAlarmReceiver.java
public class OnAlarmReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Log.d("MyApp", "Received wake up from alarm manager.");
long rowid = intent.getExtras().getLong(RemindersDbAdapter.KEY_ROWID);
WakeReminderIntentService.acquireStaticLock(context);
Intent i = new Intent(context, ReminderService.class);
i.putExtra(RemindersDbAdapter.KEY_ROWID, rowid);
context.startService(i);
}
}
ReminderManager.java
public class ReminderManager {
private Context mContext;
private AlarmManager mAlarmManager;
public ReminderManager(Context context) {
mContext = context;
mAlarmManager = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
}
public void setReminder(Long taskId, Calendar when) {
Intent i = new Intent(mContext, OnAlarmReceiver.class);
i.putExtra(RemindersDbAdapter.KEY_ROWID, (long)taskId);
int broadcastID = Integer.parseInt(taskId+""+when.getTime().getDate()+""+when.getTime().getYear()+""+taskId);
broadcastID = (int)when.getTimeInMillis();
System.out.println("Alarm when : "+ when.getTimeInMillis());
PendingIntent pi = PendingIntent.getBroadcast(mContext, broadcastID, i, PendingIntent.FLAG_ONE_SHOT);
System.out.println("Alarm Set ID : "+broadcastID);
if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
mAlarmManager = (AlarmManager)mContext.getSystemService(Context.ALARM_SERVICE);
AlarmManager.AlarmClockInfo ac= new AlarmManager.AlarmClockInfo(when.getTimeInMillis(), pi);
mAlarmManager.setAlarmClock(ac, pi);
System.out.println("Android 6.0 Marshmallow and above.");
}else if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
mAlarmManager.setExact(AlarmManager.RTC_WAKEUP, when.getTimeInMillis(), pi);
System.out.println("Android 4.4 Kikkat and above.");
}else{
mAlarmManager.set(AlarmManager.RTC_WAKEUP, when.getTimeInMillis(), pi);
System.out.println("Android 4.3 Jelly Bean and below.");
}
}
}
清單文件:
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
忘了提,我已經在清單文件中註冊.OnAlarmReceiver
<receiver android:name=".OnBootReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
<receiver android:name=".OnAlarmReceiver" />
我的主要問題是使用相同的代碼工作在我創建的新項目上進行測試,但沒有在我的主項目上工作。
有人可以幫我一把。提前致謝。
你已經註冊清單中的接收器? –
@nickfriske呀,我已經在清單中註冊了接收器 –