Android过滤器按类别安装壁纸服务

时间:2015-06-11 22:31:16

标签: android android-package-managers

我创建了一个由多个.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会返回它们但它没有。还有其他选择我不想要所有可用的动态壁纸,只需要那些实现我之前提到的类别的人。

1 个答案:

答案 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);

我希望它可以帮助别人。