2016-08-04 14 views
4

私のアプリはAndroid 7で動作していません。私のBroadcastReceiver.onReceiveメソッドが呼び出されましたが、intent.getExtrasのコンテンツがありません。データが正しくロードされたことを確認しました。ここで私のonReceiveメソッドのスニペットを示します。ここでは、intentがonReceiveのパラメータとして渡されます。Android 7 BroadcastReceiver onReceive intent.getExtrasデータがありません

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

textMessageとphoneNumbersToTextの両方がnullです。ここで

は私のマニフェストファイルからの抜粋です:

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

ここでデータがロードされたスニペットです:

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); 

同じコードは、Android 6.

で正常に動作します任意の考えはここでAndroid 7の変更が必要ですか?

ありがとうございました

答えて

1

+1、あなたは私と同じ問題を抱えているようです。私はあなたがコメントしたトラッカー(https://code.google.com/p/android/issues/detail?id=216581)にそれを記録した。

私の解決策は、私のカスタムオブジェクトを格納するためにSharedPreferencesを使用することでした。次に、アラームマネージャーが起動すると、次のコマンドを実行してオブジェクトを取り出します。 tl; dr、私はGSONを使用して、カスタムPOJOをSharedPrefsの中で/からStringとしてシリアル化/逆シリアル化します。例:

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; 

希望すると、これが役立ちます。

+0

ありがとう、私はあなたの提案を試してみます。うまくいけば、修正が近づくだろう。 –

+1

あなたのソリューションは機能しましたが、他の理由から私はデータベースにデータを保存し、単にそのキーを渡すことに決めました。 –

0

私は同様の問題がありましたが、私は簡単な解決策を見つけたと思います。あなたのデータをバンドルの中に入れ、そのバンドルをあなたのアラームの意図と一緒に送ってください。私の場合、私は自分の意図で直列化可能なオブジェクトを送りたいと思っていました。

セットアップアラーム:

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); 

がアラームを受信:

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

} 

それは私のためにうまく働きました。希望に役立ちます:)

+0

有望ですが、データはすでにデータベースに格納されていたので、単にキーを渡すことにしました。ありがとう –

関連する問題