2017-01-11 120 views
1

我要建立一個報警功能的應用程序,提醒病人按時吃藥。報警管理器沒有觸發廣播接收器

但目前的問題是報警管理器沒有在小米手機上觸發,它在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" /> 

我的主要問題是使用相同的代碼工作在我創建的新項目上進行測試,但沒有在我的主項目上工作。

有人可以幫我一把。提前致謝。

+0

你已經註冊清單中的接收器? –

+0

@nickfriske呀,我已經在清單中註冊了接收器 –

回答

0

註冊OnAlarmReceiver清單中

<receiver android:name=".OnAlarmReceiver" /> 
+0

呀,我已經在清單中註冊了接收器,但它沒有工作 –

+0

檢查您的手機。在Play商店嘗試其他鬧鐘應用。出廠重置,如果它不起作用 – cxphong

+0

正如我在上面說的那樣,相同的代碼將在我創建的新項目上進行測試 –

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