相关疑难解决方法(0)

Android 7 BroadcastReceiver onReceive intent.getExtras丢失数据

我的应用程序无法在Android 7上运行。调用了我的BroadcastReceiver.onReceive方法,但缺少intent.getExtras的内容。我已验证数据已正确加载。这是我的onReceive方法的一个片段,其中intent作为参数传递给onReceive。

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

textMessage和phoneNumbersToText均为null。

这是清单文件中的片段:

<receiver android:process=":remote" android:name="com.friscosoftware.timelytextbase.AlarmReceiver"></receiver> 
Run Code Online (Sandbox Code Playgroud)

以下是加载数据的代码段:

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);
Run Code Online (Sandbox Code Playgroud)

相同的代码在Android 6中可以正常工作。

您对Android 7需要进行哪些更改有任何想法吗?

谢谢

broadcastreceiver android-7.0-nougat

9
推荐指数
2
解决办法
1624
查看次数

Pendingintent getbroadcast丢失了可分配的数据

这是问题所在.我的程序在Android 6.0中运行完美.将设备更新到android 7.0后.Pendingintent无法将可分配的数据传递给boradcast reveiver.这是代码.

发出警报

public static void setAlarm(@NonNull Context context, @NonNull Todo todo) {
    AlarmManager alarmManager = (AlarmManager) context.getSystemService(context.ALARM_SERVICE);
    Intent intent = new Intent(context, AlarmReceiver.class);
    intent.putExtra("KEY_TODO", todo);
    PendingIntent alarmIntent = PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
    alarmManager.set(AlarmManager.RTC_WAKEUP, todo.remindDate.getTime(), alarmIntent);
}
Run Code Online (Sandbox Code Playgroud)

Todo是一个Parcelable类,而todo是我在通知中需要的实例.

在Broadcastreceiver中,我无法获取可用的数据.

public void onReceive(Context context, Intent intent) {

    Todo todo = intent.getParcelableExtra("KEY_TODO");

}
Run Code Online (Sandbox Code Playgroud)

这是我在这里调试输入图像描述时的意图 结果

我不知道为什么意图只包含一个我从未放入的Integer.Carcelable todo在哪里.此代码在Android 6.0中没有问题,但无法在7.0中运行

android broadcast parcelable android-intent android-pendingintent

4
推荐指数
2
解决办法
1736
查看次数