2016-12-01 109 views
0

当我的窗口小部件(或关联的通知)被点击时,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级,这是我的设备正在运行的。

+0

我有一个基于Android 7.0的Nexus 5X作为我的“日常驱动程序”。应用程序小部件无疑会在其上启动活动。你的测试环境是什么(即你使用的是什么硬件或模拟器)? – CommonsWare

+0

使用我的5x。小部件本身正确启动列表显示活动。这是什么时候该活动启动另一项活动,它打破了。 – gordonwd

回答

0

Mea culpa。彻底(耗尽)调试后,我找到了我的错误。这里很难解释,但是我在Android 2.3的时候做了一些事情,同时试图“优化”执行时间等。无论如何,我打破了一些常识规则,采取了一些捷径,并且只是渐渐离开与它几年。它很容易修复,现在所有功能都可以在我的设备和报告相同问题的客户的设备上使用。