从 android 电视推荐中恢复 activity
Resume activity from a android tv recommendation
我在使用 Leanback 启动器管理 Android 电视上的推荐(通知)时遇到了一些问题。
我在这里使用 google 示例来实现我自己的示例:https://github.com/googlesamples/androidtv-Leanback
预期结果:
- 我在 activity "MainActivity"(有网络视图)
- 我按 HOME,所以我在 Leanback 启动器上,推荐包括地雷。
- 我按其中一个
- 恢复 activity "MainActivity" 而不用带有新额外内容的新 Intent 重新创建它。
实际上,activity 的恢复没有重新加载 activity 工作正常,低于 PendingIntent 的创建:
private PendingIntent buildPendingIntent(Parcelable media, int id) {
Intent detailsIntent = new Intent(this, MainActivity.class);
detailsIntent.putExtra("media", media);
detailsIntent.putExtra("id", id);
TaskStackBuilder stackBuilder = TaskStackBuilder.create(this);
stackBuilder.addParentStack(MainActivity.class);
stackBuilder.addNextIntent(detailsIntent);
return stackBuilder.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT);
}
当前结果:
- 我在 activity "MainActivity"(有网络视图)
- 我按 HOME,所以我在 Leanback 启动器上,推荐包括地雷。
- 我按其中一个
- 我的 activity 通过 extrat intent 值接收 "onNewIntent" 事件我总是使用相同的媒体。
此解决方案不起作用,因为 Google 在示例代码的注释中说:
// Ensure a unique PendingIntents, otherwise all recommendations end up with the same
// PendingIntent
detailsIntent.setAction(movie.getId());
所以为了区分所有的推荐,我必须为 Action 设置一个 ID,否则,它将始终是发送到我的 activity 的最后一个 pendingintent。这是我目前的行为,我在 "onNewIntent" 中总是收到相同的 "media" 和 "id" 意图(最后一个),无论我点击哪个建议,我总是得到相同的意图。
但是,如果我使用 "id" 设置操作,则会重新创建 activity "MainActivity",因此恢复失败,我的 webview 的上下文被清除,我的 webview 被重新加载:( 但我在额外的意图值中得到了良好媒体的良好意图。
你有没有解决方案来帮助我实现我想要的行为?
为了简化我的问题,如何在不重新加载我的 activity 的情况下从具有良好 pendingintent 的推荐中恢复我的 Activity B?
预先感谢您的帮助。
我找到了解决办法。我不认为它是好的,但它适用于我的情况。
PendingIntent pIntent = PendingIntent.getActivity(this, id, detailsIntent, PendingIntent.FLAG_UPDATE_CURRENT);
return pIntent;
所以,如果我用 id 设置 "resquetCode",那么 Android 认为它是一个不同的 Activity 并恢复它而不重新创建一个新的。
我在使用 Leanback 启动器管理 Android 电视上的推荐(通知)时遇到了一些问题。
我在这里使用 google 示例来实现我自己的示例:https://github.com/googlesamples/androidtv-Leanback
预期结果:
- 我在 activity "MainActivity"(有网络视图)
- 我按 HOME,所以我在 Leanback 启动器上,推荐包括地雷。
- 我按其中一个
- 恢复 activity "MainActivity" 而不用带有新额外内容的新 Intent 重新创建它。
实际上,activity 的恢复没有重新加载 activity 工作正常,低于 PendingIntent 的创建:
private PendingIntent buildPendingIntent(Parcelable media, int id) {
Intent detailsIntent = new Intent(this, MainActivity.class);
detailsIntent.putExtra("media", media);
detailsIntent.putExtra("id", id);
TaskStackBuilder stackBuilder = TaskStackBuilder.create(this);
stackBuilder.addParentStack(MainActivity.class);
stackBuilder.addNextIntent(detailsIntent);
return stackBuilder.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT);
}
当前结果:
- 我在 activity "MainActivity"(有网络视图)
- 我按 HOME,所以我在 Leanback 启动器上,推荐包括地雷。
- 我按其中一个
- 我的 activity 通过 extrat intent 值接收 "onNewIntent" 事件我总是使用相同的媒体。
此解决方案不起作用,因为 Google 在示例代码的注释中说:
// Ensure a unique PendingIntents, otherwise all recommendations end up with the same
// PendingIntent
detailsIntent.setAction(movie.getId());
所以为了区分所有的推荐,我必须为 Action 设置一个 ID,否则,它将始终是发送到我的 activity 的最后一个 pendingintent。这是我目前的行为,我在 "onNewIntent" 中总是收到相同的 "media" 和 "id" 意图(最后一个),无论我点击哪个建议,我总是得到相同的意图。
但是,如果我使用 "id" 设置操作,则会重新创建 activity "MainActivity",因此恢复失败,我的 webview 的上下文被清除,我的 webview 被重新加载:( 但我在额外的意图值中得到了良好媒体的良好意图。
你有没有解决方案来帮助我实现我想要的行为?
为了简化我的问题,如何在不重新加载我的 activity 的情况下从具有良好 pendingintent 的推荐中恢复我的 Activity B?
预先感谢您的帮助。
我找到了解决办法。我不认为它是好的,但它适用于我的情况。
PendingIntent pIntent = PendingIntent.getActivity(this, id, detailsIntent, PendingIntent.FLAG_UPDATE_CURRENT);
return pIntent;
所以,如果我用 id 设置 "resquetCode",那么 Android 认为它是一个不同的 Activity 并恢复它而不重新创建一个新的。