【发布时间】:2016-12-01 00:07:38
【问题描述】:
当我的小部件(或相关通知)被点击时,PendingIntent 会启动一个活动,该活动会显示与小部件相关的项目列表。如果点击列表项之一,小部件活动将使用标准操作意图启动我的主要活动。然后主活动显示有关所选项目的详细信息。
这一切都通过 Android 6.x Marshmallow 完美运行,但在 Android 7 (Nougat) 上,启动的主 Activity 在视图中显示正确的数据,但整个 UI 完全没有响应。按钮、滚动、视图滑动:没有任何作用!唯一会做出响应的是系统后退按钮,它可以按预期将您带回到小部件活动的列表。
Nougat 的哪些变化会导致这种情况?我的构建目标是 23。启动主要活动的所有其他方式都可以正常工作,并且在早期的 Android 版本上一切仍然有效。这是启动主要活动的代码:
String uri = "file://" + mPrefs.getDbPath();
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.parse(uri), "application/octet-stream");
int indId = otdEvt.mId[0] > 0 ? otdEvt.mId[0] : otdEvt.mId[1];
intent.putExtra(EXTRA_LAUNCH_ID, indId);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
try {
startActivity(intent);
}
catch (ActivityNotFoundException e) {
Toast.makeText(mCtx, getString(R.string.launch_err), Toast.LENGTH_SHORT).show();
}
有或没有 FLAG_ACTIVITY_NEW_TASK 没有区别。
新信息:如果我还包括 FLAG_ACTIVITY_CLEAR_TASK,则启动的主要活动按预期工作。但是,这不是一个可接受的解决方案,因为按下后退按钮会返回主屏幕,而不是显示项目列表的小部件活动。我还将我的构建目标和库更新到了 24 级,这是我的设备正在运行的。
【问题讨论】:
-
我有一个 Android 7.0 驱动的 Nexus 5X 作为我的“日常驱动程序”。应用程序小部件可以毫无问题地在其上启动活动。您的测试环境是什么(即您使用的是什么硬件或模拟器)?
-
使用我的 5x。小部件本身正确启动列表显示活动。当该活动启动另一个活动时,它会中断。
标签: android android-intent android-activity