我创建了一个由多个.apk组成的插件应用程序 某些.apk仅提供具有以下XML的动态壁纸服务:
<application
... omitted
<service
android:name=".DigitalWallpaperService"
android:label="Wear Digital WatchFace">
<intent-filter>
<action android:name="android.service.wallpaper.WallpaperService" />
<category android:name="xxx.WATCHFACE" />
</intent-filter>
<meta-data
android:name="android.service.wallpaper"
android:resource="@xml/clock"/>
</service>
</application>
我创建了一个只需要检索此类服务的AsyncLoader,所以我的查询看起来像这样:
// query the available watch faces
Intent filter = new Intent("android.service.wallpaper.WallpaperService");
filter.addCategory("xxx.WATCHFACE");
List<ResolveInfo> watchFaces = packageManager.queryIntentServices(filter, 0);
但我什么都没回来。我虽然packageManager.queryIntentServices会返回它们但它没有。还有其他选择我不想要所有可用的动态壁纸,只需要那些实现我之前提到的类别的人。
答案 0 :(得分:0)
所以我已经解决了使用不同的Intent Filter的问题。 首先,我使用我公司命名空间拥有的特殊类别声明我的动态壁纸:
<service
android:name=".DigitalWallpaperService"
android:label="Wear Digital WatchFace"
android:enabled="true"
android:permission="android.permission.BIND_WALLPAPER" >
<intent-filter>
<action android:name="android.service.wallpaper.WallpaperService" />
<category android:name="ltd.mycompany.WATCHFACE" />
</intent-filter>
<meta-data
android:name="android.service.wallpaper"
android:resource="@xml/clock"/>
</service>
然后我只是查询可用的壁纸服务并使用我的类别进行过滤:
// search all wallpaper service
Intent filter = new Intent(WallpaperService.SERVICE_INTERFACE);
filter.addCategory("ltd.mycompany.WATCHFACE");
List<ResolveInfo> watchFaces = packageManager.queryIntentServices(filter, PackageManager.GET_META_DATA);
我希望它可以帮助别人。