系统开启桌面小部件支持
2016-05-18 13:47
369 查看
发现用的这块开发板挺坑的,刚确认原来是系统不支持桌面小部件,之前一直认为是同事开发的桌面APP有问题。。。
那么问题来了就解决吧,搜索没搜索到答案,就记录下跟踪记录吧。
获取小部件集合代码:
/frameworks/base/core/java/android/appwidget/AppWidgetManager.java
getInstalledProviders方法调用了
getInstalledProviders(AppWidgetProviderInfo.WIDGET_CATEGORY_HOME_SCREEN);方法
在该方法中是通过
List<AppWidgetProviderInfo> providers = sService.getInstalledProviders(categoryFilter, mContext.getUserId());
获取支持的小部件集合。跟踪getInstalledProviders方法,实现文件:
/frameworks/base/services/java/com/android/server/AppWidgetService.java
该方法中调用
getImplForUser(userId).getInstalledProviders(categoryFilter);获取集合
getInstalledProviders(categoryFilter)在
/frameworks/base/services/java/com/android/server/AppWidgetServiceImpl.java
中实现,在该方法中有一段代码比较重要
if (!mHasFeature) {
return new ArrayList<AppWidgetProviderInfo>(0);
}
现实情况是进入到了该条件中,那么mHasFeature从哪里获取到的呢?
在AppWidgetServiceImpl实例化方法中对该值进行了初始化
mHasFeature = context.getPackageManager().hasSystemFeature(
PackageManager.FEATURE_APP_WIDGETS);
继续跟踪,发现hasSystemFeature方法在/frameworks/base/services/java/com/android/server/pm/PackageManagerService.java
中进行了实现,return mAvailableFeatures.containsKey(name);
mAvailableFeatures为一个哈希表集合,查找添加特性的方法
readPermissionsFromXml(File permFile)该方法里调用了添加特性方法,找到这里就差不多了感觉,应该是读取系统配置文件了,
继续查找发现该方法被readPermissions方法调用,读取/system/etc/permissions目录下的xml文件,到该目录下看了看的确定义了
一些特性,但未发现有android.software.app_widgets特性,到这里基本就到头了,下面就是如何将该特性添加到配置文件中了,
本来我是不知道如何添加的,但我有Android手机,而且ROOT了,那么我就有参考了,将手机里的permissions目录复制出来,查找,
在handheld_core_hardware.xml问价中找到了该特性的设置,然后我就在我的工程中搜索相似文件,因为我做的是类平板系统,发现了
tablet_core_hardware.xml文件,在该文件中添加android.software.app_widgets特性,编译,烧写,OK~!
说明下tablet_core_hardware.xml文件一般是存放于/frameworks/native/data/etc/t目录下,但有定制的有可能放在device等其他目录下,
所以还是要确认好了具体是哪个文件生效。
那么问题来了就解决吧,搜索没搜索到答案,就记录下跟踪记录吧。
获取小部件集合代码:
List<AppWidgetProviderInfo> widgetProviderInfos = AppWidgetManager.getInstance(this).getInstalledProviders();查找AppWidgetManager类实现文件:
/frameworks/base/core/java/android/appwidget/AppWidgetManager.java
getInstalledProviders方法调用了
getInstalledProviders(AppWidgetProviderInfo.WIDGET_CATEGORY_HOME_SCREEN);方法
在该方法中是通过
List<AppWidgetProviderInfo> providers = sService.getInstalledProviders(categoryFilter, mContext.getUserId());
获取支持的小部件集合。跟踪getInstalledProviders方法,实现文件:
/frameworks/base/services/java/com/android/server/AppWidgetService.java
该方法中调用
getImplForUser(userId).getInstalledProviders(categoryFilter);获取集合
getInstalledProviders(categoryFilter)在
/frameworks/base/services/java/com/android/server/AppWidgetServiceImpl.java
中实现,在该方法中有一段代码比较重要
if (!mHasFeature) {
return new ArrayList<AppWidgetProviderInfo>(0);
}
现实情况是进入到了该条件中,那么mHasFeature从哪里获取到的呢?
在AppWidgetServiceImpl实例化方法中对该值进行了初始化
mHasFeature = context.getPackageManager().hasSystemFeature(
PackageManager.FEATURE_APP_WIDGETS);
继续跟踪,发现hasSystemFeature方法在/frameworks/base/services/java/com/android/server/pm/PackageManagerService.java
中进行了实现,return mAvailableFeatures.containsKey(name);
mAvailableFeatures为一个哈希表集合,查找添加特性的方法
readPermissionsFromXml(File permFile)该方法里调用了添加特性方法,找到这里就差不多了感觉,应该是读取系统配置文件了,
继续查找发现该方法被readPermissions方法调用,读取/system/etc/permissions目录下的xml文件,到该目录下看了看的确定义了
一些特性,但未发现有android.software.app_widgets特性,到这里基本就到头了,下面就是如何将该特性添加到配置文件中了,
本来我是不知道如何添加的,但我有Android手机,而且ROOT了,那么我就有参考了,将手机里的permissions目录复制出来,查找,
在handheld_core_hardware.xml问价中找到了该特性的设置,然后我就在我的工程中搜索相似文件,因为我做的是类平板系统,发现了
tablet_core_hardware.xml文件,在该文件中添加android.software.app_widgets特性,编译,烧写,OK~!
说明下tablet_core_hardware.xml文件一般是存放于/frameworks/native/data/etc/t目录下,但有定制的有可能放在device等其他目录下,
所以还是要确认好了具体是哪个文件生效。
相关文章推荐
- Open-Falcon第五步安装Query(小米开源互联网企业级监控系统)
- 【转】JVM内存模型
- android 不能接收组播数据,但能够发送组播数据
- python将url转换成二维码
- 小爱
- session详解
- intent.setFlags方法中的参数值含义
- 欢迎使用CSDN-markdown编辑器
- 数据库设计
- 3 Indexes and Index-Organized Tables读书笔记
- Autofac 同时支持MVC 与Webapi
- DailyNote
- Angular JS中 Promise用法
- hdu1081(最大子矩阵和)
- LeetCode-23.Merge k Sorted Lists
- 【规律】【贪心】【数学】HDU 5573 Binary Tree
- Linux下开发C#程序
- 第十二周上机实践——项目1-实现复数类中的运算符重载-(3)
- 无法定位序数 xxxx 与动态链接库 avformat-56.dll上
- Effective cpp 读书笔记3