当我的窗口小部件(或关联的通知)被点击时,PendingIntent启动一个活动,显示与窗口小部件相关的项目列表。如果其中一个列表项目被点击,那么这个小部件活动将使用标准动作意图启动我的主要活动。主要活动然后显示关于所选项目的详细信息。从Nougat中无响应的窗口小部件活动启动的活动
这一切都通过Android 6.x Marshmallow完美工作,但在Android 7(Nougat)上,启动的主要活动在视图中显示正确的数据,但整个UI完全没有响应。按钮,滚动,视图刷:它没有任何事情!唯一能做出响应的就是系统“后退”按钮,可以按照预期将您带回窗口小部件活动列表。
牛轧糖会改变什么?我的构建目标是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作为我的“日常驱动程序”。应用程序小部件无疑会在其上启动活动。你的测试环境是什么(即你使用的是什么硬件或模拟器)? – CommonsWare
使用我的5x。小部件本身正确启动列表显示活动。这是什么时候该活动启动另一项活动,它打破了。 – gordonwd