其他分享
首页 > 其他分享> > android-从和向WallpaperService启动意图

android-从和向WallpaperService启动意图

作者:互联网

我有一个显示图像的动态壁纸.我在活动中更改该图像.然后,我需要通知动态壁纸,以便它知道重新加载资源.

意图似乎是完美,简单的解决方案:

Intent intent = new Intent(MyActivity.this, MyWallpaperService.class);
startService(intent);

我和MyWallpaperService中

@Override   
public int onStartCommand (Intent intent, int flags, int startId) {...}

我还需要知道,在另一项服务中,用户何时点击屏幕.我使用与发送和接收意图完全相同的机制.

一切在Android 4.0设备和仿真器上都能正常运行.
但是我在Android 2.2和2.3.3模拟器上进行了测试,并得到以下错误:

java.lang.SecurityException: Not allowed to start service Intent { cmp=com.domain.name/.liveWallpaper.MyWallpaperService } without permission android.permission.BIND_WALLPAPER

我的清单在service标签内包含正确的android:permission:

    <service
        android:name=".liveWallpaper.MyWallpaperService"
        android:label="@string/app_name"
        android:permission="android.permission.BIND_WALLPAPER" >
        <intent-filter>
            <action android:name="android.service.wallpaper.WallpaperService" />
        </intent-filter>
        <meta-data
            android:name="android.service.wallpaper"
            android:resource="@xml/livewallpaper_data" />
    </service>

为什么仅在旧版本(Android 2.2和2.3.3)上会出现此错误?是否禁止或建议将Intent发送到WallpaperService?它与只有系统才能绑定到具有BIND_WALLPAPER权限的服务有关吗?
最后,如果意图不起作用,替代的简单解决方案是什么?

解决方法:

尝试向清单文件中的服务添加权限,如下所示:

<service android:name=".LiveWallpaper"
android:label="@string/app_name"
android:icon="@drawable/icon"
android:permission="android.permission.BIND_WALLPAPER">

希望有帮助

标签:live-wallpaper,android-intent,android-service,android
来源: https://codeday.me/bug/20191030/1964157.html