2017-01-11 1 views
1

Ich werde eine Anwendung mit Alarmfunktion erstellen, um die Patienten daran zu erinnern, Medikamente rechtzeitig zu nehmen.Alarm Manager hat Triggger nicht zum Senden des Empfängers

Aber das aktuelle Problem ist der Alarm-Manager hat nicht auf dem XiaoMi-Telefon ausgelöst, und es funktioniert auf dem Samsung Note 4 in Android 6.0. Und bevor ich den Code für mein Projekt implementiert habe, musste ich ein neues Projekt erstellen und denselben Code verwenden, um es zu testen. Im neuen Projekt funktioniert der Code einwandfrei, solange die Autostart-Berechtigung gewährt ist. Der Alarm löst pünktlich aus und sogar das Telefon wird neu gestartet. Der Boot-Empfänger funktioniert auch, um den Alarm neu zu erstellen, aber er hat nur bei meiner Anwendung nicht funktioniert.

Und jetzt ist unten mein Code.

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."); 
     } 
    } 
} 

Manifest-Datei:

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

vergessen zu erwähnen, hatte ich bereits die .OnAlarmReceiver in Manifest-Datei registrieren

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

Mein Hauptproblem ist mit dem gleichen Code es auf dem neuen Projekt zu arbeiten, das ich erstellt habe, um Tests zu machen, aber nicht an meinem Hauptprojekt arbeitete.

Kann mir jemand helfen. Danke im Voraus.

+0

Haben Sie den Empfänger im Manifest registrieren? –

+0

@nickfriske yah, ich hatte den Empfänger im Manifest bereits registrieren –

Antwort

0

Register OnAlarmReceiver in manifest

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

yah, ich hatte den Empfänger im Manifest bereits registrieren, aber es hat nicht funktioniert –

+0

Überprüfen Sie Ihr Telefon. Probiere andere Alarm-App im Play Store aus. Factory reset, wenn es nicht funktioniert – cxphong

+0

als was ich oben sage, der gleiche Code wird auf das neue Projekt, das ich erstellt, um Tests zu tun –

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