Android N 添加PowerControl Widget
来源:互联网 发布:tcp 是不是解析域名 编辑:程序博客网 时间:2024/06/02 03:44
问题
开启Power Control Widget,过开机向导报错,报错log如下:
12-23 19:19:46.050 E/AndroidRuntime(868): FATAL EXCEPTION: main12-23 19:19:46.050 E/AndroidRuntime(868): Process: com.android.settings, PID: 86812-23 19:19:46.050 E/AndroidRuntime(868): java.lang.RuntimeException: Unable to start receiver com.android.settings.widget.SettingsAppWidgetProvider: java.lang.IllegalStateException: User 0 must be unlocked for widgets to be available12-23 19:19:46.050 E/AndroidRuntime(868): at android.app.ActivityThread.handleReceiver(ActivityThread.java:3047)12-23 19:19:46.050 E/AndroidRuntime(868): at android.app.ActivityThread.-wrap18(ActivityThread.java)12-23 19:19:46.050 E/AndroidRuntime(868): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1561)12-23 19:19:46.050 E/AndroidRuntime(868): at android.os.Handler.dispatchMessage(Handler.java:102)12-23 19:19:46.050 E/AndroidRuntime(868): at android.os.Looper.loop(Looper.java:154)12-23 19:19:46.050 E/AndroidRuntime(868): at android.app.ActivityThread.main(ActivityThread.java:6119)12-23 19:19:46.050 E/AndroidRuntime(868): at java.lang.reflect.Method.invoke(Native Method)12-23 19:19:46.050 E/AndroidRuntime(868): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)12-23 19:19:46.050 E/AndroidRuntime(868): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)12-23 19:19:46.050 E/AndroidRuntime(868): Caused by: java.lang.IllegalStateException: User 0 must be unlocked for widgets to be available12-23 19:19:46.050 E/AndroidRuntime(868): at android.os.Parcel.readException(Parcel.java:1692)12-23 19:19:46.050 E/AndroidRuntime(868): at android.os.Parcel.readException(Parcel.java:1637)12-23 19:19:46.050 E/AndroidRuntime(868): at com.android.internal.appwidget.IAppWidgetService$Stub$Proxy.updateAppWidgetProvider(IAppWidgetService.java:745)12-23 19:19:46.050 E/AndroidRuntime(868): at android.appwidget.AppWidgetManager.updateAppWidget(AppWidgetManager.java:634)12-23 19:19:46.050 E/AndroidRuntime(868): at com.android.settings.widget.SettingsAppWidgetProvider.updateWidget(SettingsAppWidgetProvider.java:720)12-23 19:19:46.050 E/AndroidRuntime(868): at com.android.settings.widget.SettingsAppWidgetProvider.onReceive(SettingsAppWidgetProvider.java:839)12-23 19:19:46.050 E/AndroidRuntime(868): at android.app.ActivityThread.handleReceiver(ActivityThread.java:3040)12-23 19:19:46.050 E/AndroidRuntime(868): ... 8 more
分析
- 通过
User 0 must be unlocked for widgets to be available
可定位到AppWidgetServiceImpl.java
private void ensureGroupStateLoadedLocked(int userId, boolean enforceUserUnlockingOrUnlocked) { if (enforceUserUnlockingOrUnlocked && !isUserRunningAndUnlocked(userId)) { throw new IllegalStateException( "User " + userId + " must be unlocked for widgets to be available"); } if (enforceUserUnlockingOrUnlocked && isProfileWithLockedParent(userId)) { throw new IllegalStateException( "Profile " + userId + " must have unlocked parent"); } final int[] profileIds = mSecurityPolicy.getEnabledGroupProfileIds(userId); ......}
出现该错误是由于isUserRunningAndUnlocked()返回为false,进一步追踪
private boolean isUserRunningAndUnlocked(@UserIdInt int userId) { return mUserManager.isUserRunning(userId) && StorageManager.isUserKeyUnlocked(userId);}
通过打印LOG得知mUserManager.isUserRunning(userId)返回true,StorageManager.isUserKeyUnlocked(userId)返回为false。
2. 出现该错误是由于执行SettingsAppWidgetProvider中回调方法onReceive()->updateWidget()->
final AppWidgetManager gm = AppWidgetManager.getInstance(context);gm.updateAppWidget(THIS_APPWIDGET, views);
解决
修改onReceive()方法updateWidget的逻辑
final int userId = UserHandle.getCallingUserId(); Log.i("wangyannan"," userid:"+userId); if(StorageManager.isUserKeyUnlocked(userId)){ updateWidget(context); }else{ Log.i("wangyannan","unlocked->userid:"+userId); }
备注
Android N平台增加了Directboot功能,在做某些访问时需要确定该用户是否解锁,如果解锁才允许访问。故该问题是由于刚进开机向导时间过早,用户还没有解锁,进而导致更新widget出错。
阅读全文
1 0
- Android N 添加PowerControl Widget
- Android添加Widget
- Android Widget添加自定义控件
- Android Widget 小部件(三) 在Activity中添加Widget
- Android Widget 小部件(三) 在Activity中添加Widget
- Android 使用Widget 添加桌面小组件
- widget添加
- android Widget添加过程和android添加widget不更新的问题分析解决
- android Widget添加过程和android添加widget不更新的问题分析解决
- android studio添加android.support.v4.widget.ViewDragHelper包
- 一个android应用向Home screen添加多个Widget
- Android将Widget添加到自己的应用程序
- Android将Widget添加到自己的应用程序
- Android将Widget添加到自己的应用程序
- 一个android应用向Home screen添加多个Widget
- Android中如何给app widget添加复杂view
- Android 动态添加布局(layout)和控件(Widget)
- android widget
- 定义列表
- Android中处理崩溃异常
- SQL数据库备份与恢复
- safari,ios微信网页 typeError错误
- AsyncTask的用法
- Android N 添加PowerControl Widget
- js追加元素的几种方法
- hibernate criteria 查找特定表中的distinct字段
- gulp基础知识上
- 手机APP上面手势操作的讲究
- 数据结构栈—线性表实现
- c++回调函数
- Markdown 快捷键
- 把项目加到svn版本库中