系统开启桌面小部件支持

发现用的这块开发板挺坑的,刚确认原来是系统不支持桌面小部件,之前一直认为是同事开发的桌面APP有问题。。。

那么问题来了就解决吧,搜索没搜索到答案,就记录下跟踪记录吧。

获取小部件集合代码:

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等其他目录下,

所以还是要确认好了具体是哪个文件生效。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值