2017-02-02 11 views
1

Ich habe eine Anwendung, die einige Aktivitäten mit AlarmManager Service planen. Es funktioniert die meiste Zeit, aber manchmal sendet es keine Broadcast und so Broadcast-Empfänger erhält nichts (auch wenn die App läuft und Front Aktivität ist). Ich lese die Weckzeit von einem TimePicker-Widget. Hier sind meine Code-Schnipsel:Android: Alarm wird manchmal nicht ausgelöst

Set Alarm:

private void setAlarm(int hour, int minute) { 
    //define intent and parameters 
    Intent intent = new Intent(getApplicationContext(), AlarmReceiver.class); 
    intent.putExtra(TAG_NAME, name); 
    intent.putExtra(TAG_ADDRESS, address); 
    intent.putExtra(TAG_AVERAGE, average); 
    intent.putExtra(TAG_DATABASE_ID, dbID); 
    //define alarm pedning intent 
    PendingIntent alarmIntent = PendingIntent.getBroadcast(getApplicationContext(),(int)dbID, 
      intent, PendingIntent.FLAG_UPDATE_CURRENT); 
    //calculate alarm time 
    Calendar currentTimeCalendar = Calendar.getInstance(); 


    currentTimeCalendar.set(Calendar.HOUR_OF_DAY, hour); 
    currentTimeCalendar.set(Calendar.MINUTE, minute); 
    currentTimeCalendar.set(Calendar.SECOND, 0); 

    int h = currentTimeCalendar.get(Calendar.HOUR_OF_DAY); 
    int m = currentTimeCalendar.get(Calendar.MINUTE); 
    int s= currentTimeCalendar.get(Calendar.SECOND); 
    Toast.makeText(getApplicationContext(), "Hour "+h+":"+m+":"+s, Toast.LENGTH_LONG).show(); 


    SimpleDateFormat dateFormat = new SimpleDateFormat("DD-MMM-yyyy hh:mm:ss"); 
    String date = dateFormat.format(currentTimeCalendar.getTime()); 
    Log.v("VSB_TAG","Alarm Time: "+date); 
    // set alarm 
    AlarmManager alarmMgr = (AlarmManager) getApplicationContext().getSystemService(Context.ALARM_SERVICE); 
    alarmMgr.set(AlarmManager.RTC_WAKEUP, currentTimeCalendar.getTimeInMillis(), alarmIntent); 

} 

Rundfunkempfänger:

public class AlarmReceiver extends BroadcastReceiver { 
    public AlarmReceiver() { 
    } 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     Bundle bundle = intent.getExtras(); 
     Log.v("VHB_TAG", "Alarm Received"); 
     if (bundle == null) 
      return; 
     String name = bundle.getString(StudentDetailsActivity.TAG_NAME); 
     String address = bundle.getString(StudentDetailsActivity.TAG_ADDRESS); 
     double average = bundle.getDouble(StudentDetailsActivity.TAG_AVERAGE); 
     long dbID = bundle.getLong(StudentDetailsActivity.TAG_DATABASE_ID); 
     Toast.makeText(context, "Alarm for " + name, Toast.LENGTH_LONG).show(); 

     displayStudentNotification(context, name, address, dbID,bundle); 

    } 

    private void displayStudentNotification(Context context, String name, String address, long dbID, Bundle bundle) { 
     .... 
     .... 
    } 

} 

Und hier ist das Manifest:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="net.evegroup.studentslist"> 

    <application 
     android:allowBackup="true" 
     android:icon="@mipmap/ic_launcher" 
     android:label="@string/app_name" 
     android:supportsRtl="true" 
     android:theme="@style/AppTheme"> 
     <activity android:name=".MainActivity"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
     <activity android:name=".StudentDetailsActivity" /> 

     <receiver 
      android:name=".AlarmReceiver" 
      android:enabled="true" 
      android:exported="true"></receiver> 
    </application> 

</manifest> 

Antwort

1

Da das Problem nur sporadisch auftritt, liegt das Problem wahrscheinlich nicht in dem angezeigten Code.

Wenn ein Alarm ausgelöst wird, wird er ausgelöst, sodass Sie überprüfen müssen, ob Sie ihn korrekt oder wie erwartet eingestellt haben.

Sie könnten den gewünschten Alarm auch mit einem anderen zu einem späteren Zeitpunkt überschreiben.

+0

Sie sagen also, die Gesamtlogik des Codes, den ich gepostet habe, scheint gut zu sein? – VSB

+0

Ich habe es nicht überprüft, aber Sie sagen, der Code funktioniert manchmal, so dass Ihr Problem eher die Verwendung des Codes als der Code selbst ist. – Kuffs

Verwandte Themen