点击我的窗口小部件(或关联的通知)后,PendingIntent会启动一项活动,该活动会显示与窗口小部件相关的项目列表。如果轻触其中一个列表项,则窗口小部件活动将使用标准操作意图启动我的主要活动。然后,主要活动显示有关所选项目的详细信息。
这一切都完全通过Android 6.x Marshmallow完成,但在Android 7(Nougat)上,已启动的主要活动在视图中显示正确的数据,但整个用户界面完全没有响应。按钮,滚动,查看滑动:它们都没有做任何事情!唯一能做出响应的是系统返回按钮,它会按预期将您带回到窗口小部件活动的列表中。
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级,这是我的设备运行的。
答案 0 :(得分:0)
Mea culpa。在彻底(耗尽)调试之后,我找到了我的错误。这里很难解释,但是我在Android 2.3天试图进行"优化"无论如何,我打破了一些常识规则,采取了一些捷径,并且已经侥幸逃脱了几年。它很容易修复,现在所有设备都在我的设备和报告相同问题的客户的设备上工作。