2016-08-04 22 views
4

Meine App funktioniert nicht auf Android 7. Meine BroadcastReceiver.onReceive-Methode wird aufgerufen, aber der Inhalt der intent.getExtras fehlt. Ich habe überprüft, dass die Daten korrekt geladen wurden. Hier ist ein Ausschnitt aus meiner onReceive-Methode, bei der intent als Parameter an onReceive übergeben wird.Android 7 BroadcastReceiver onReceive intent.getExtras fehlende Daten

Bundle bundle = intent.getExtras(); 
textMessage = bundle.getString("TEXT_MESSAGE"); 
ArrayList<MyPhoneNumber> phoneNumbersToText = bundle.getParcelableArrayList("PHONE_NUMBERS"); 

Sowohl textMessage als auch phoneNumbersToText sind null.

Hier ist ein Ausschnitt aus meinem Manifest-Datei:

<receiver android:process=":remote" android:name="com.friscosoftware.timelytextbase.AlarmReceiver"></receiver> 

Hier ist ein Ausschnitt in dem die Daten geladen:

Intent intent = new Intent(context , AlarmReceiver.class); 
intent.putExtra(Constants.TEXT_MESSAGE, scheduledItem.getMessageToSend()); 
intent.putExtra(Constants.PHONE_NUMBERS, scheduledItem.getPhoneNumbersToText());  

PendingIntent sender = PendingIntent.getBroadcast(context, getRequestCodeFromKey(key), intent, PendingIntent.FLAG_UPDATE_CURRENT); 

// Get the AlarmManager service 
AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); 
alarmManager.set(AlarmManager.RTC_WAKEUP, selectedDateTime.getTimeInMillis(), sender); 

Der gleiche Code in Android adaequat 6.

Irgendwelche Gedanken Welche Änderungen sind für Android 7 erforderlich?

Danke

Antwort

1

+1, es sieht aus wie Sie das gleiche Problem wie ich haben sind. Ich habe es auf dem Tracker notiert, (https://code.google.com/p/android/issues/detail?id=216581) den du kommentiert hast.

Meine Lösung bestand darin, SharedPreferences zu verwenden, um mein benutzerdefiniertes Objekt zu speichern. Wenn der Alarmmanager dann ausgelöst wird, führe ich Folgendes aus, um das Objekt zu entfernen. tl; dr, benutze ich GSON, um mein benutzerdefiniertes POJO in/aus SharedPrefs als String zu serialisieren/deserialisieren. Zum Beispiel:

String json = getSharedPrefs(context).getString(NotificationUtility.NEXT_REMINDER_KEY, "No reminder found"); 
    try { 
     Gson gson = new Gson(); 
     Reminder reminder = gson.fromJson(json, Reminder.class); 
     if (reminder != null) { 
      return reminder; 
     } 
    } catch (Exception error) { 
     Log.i(TAG, "Error parsing json: " + error.getMessage(), error); 
     return null; 
    } 
    return null; 

Hoffe das hilft Ihnen aus!

+0

Danke, ich werde es versuchen, Ihren Vorschlag. Hoffentlich wird eine Lösung folgen. –

+1

Ihre Lösung hat funktioniert, aber aus anderen Gründen habe ich beschlossen, die Daten in einer Datenbank zu speichern und den Schlüssel einfach zu übergeben. –

0

Ich hatte ein ähnliches Problem, aber ich denke, ich fand eine einfache Lösung. Stellen Sie Ihre Daten in ein Bundle und senden Sie das Paket mit Ihrer Alarmabsicht. In meinem Fall wollte ich ein serialisierbares Objekt mit meiner Absicht senden.

Setup-Alarm:

AlarmManager alarmManager = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE); 
` 
Intent intent = new Intent(context, AlarmReciever.class); 
Bundle bundle = new Bundle(); 

// creating an example object 
ExampleClass exampleObject = new ExampleClass(); 

// put the object inside the Bundle 
bundle.putSerializable("exapmle", exampleObject); 

// put the Bundle inside the intent 
intent.putExtra("bundle",bundle); 

PendingIntent alarmIntent = PendingIntent.getBroadcast(context, 1, intent, PendingIntent.FLAG_UPDATE_CURRENT); 

// setup the alarm 
alarmManager.setExact(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), alarmIntent); 

den Alarm Empfangen:

public class AlarmReciever extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 

     // get the Bundle 
     Bundle bundle = intent.getBundleExtra("bundle"); 
     // get the object 
     ExampleClass exampleObject = (ExampleClass)bundle.getSerializable("example"); 
    } 

} 

Es funktionierte gut für mich. Hoffe es hilft :)

+0

Sieht vielversprechend aus, aber da die Daten bereits in einer Datenbank gespeichert wurden, habe ich beschlossen, den Schlüssel einfach zu übergeben. Vielen Dank –