2011-05-12 51 views
0

LiveWallpapers有权限BIND_WALLPAPER,它只允许系统绑定到它。当设备启动时,我想将livewallpaper服务设置为壁纸。为此,我编写了一个广播接收器,它在启动时意味着使用意图启动壁纸服务。活壁纸的组件被设置为意图的组成部分。目前这可以检测壁纸服务,但由于权限BIND_WALLPAPER无法设置。我的应用程序的清单包括如下广播接收机如何获得android系统启动livewallpaper服务?

<receiver android:name=".MyStartupIntentReceiver" android:permission="android.permission.BIND_WALLPAPER"> 
     <intent-filter> 
      <action android:name="android.intent.action.BOOT_COMPLETED" /> 
      <category android:name="android.intent.category.HOME" /> 
     </intent-filter> 
     <intent-filter> 
      <action android:name="android.intent.action.SET_WALLPAPER" /> 
      <category android:name="android.intent.category.HOME"/> 
     </intent-filter>   
    </receiver> 

广播接收机如下:

Intent ii = new Intent(Intent.ACTION_MAIN); 
    ii.addCategory(Intent.CATEGORY_HOME); 

    ii.setComponent(new ComponentName("com.example.android.livecubes","com.example.android.livecubes.cube1.CubeWallpaper1")); 
    context.startService(ii); 

香港专业教育学院还试图用action.SET_WALLPAPER ...类别上面:启动/默认,但一切都抛错误权限被拒绝:需要bind_wallpaper。该许可在服务端和接收端都存在。如何在无需选择器/动态壁纸选取器的情况下设置启动时的动态壁纸?

回答

0

这是不可能的。您可以启动选择器,但无法绕过选择器并实际以无缝方式设置壁纸。查看来自Romain Guy的评论:http://groups.google.com/group/android-developers/browse_thread/thread/a22e66002f884718

+0

谢谢您的回复。可以通过看看android操作系统如何做到这一点吗?我想看看android os源代码,你有什么建议吗? – SDLBING 2011-05-13 04:30:30

+0

@SDLBING我的理解是,这对于应用程序员来说是不可能的。它不是“公共”API的一部分。换句话说,它需要我们无法获得的“许可”。你可以看看选择器是如何工作的,但是你不能复制它的方法。我拥有的最佳“证明”是我从未见过任何人获得这项工作。例如,aniPet水族馆动态壁纸附带了一个应用程序,以方便设置壁纸,但它所做的只是启动选择器。 – 2011-05-13 07:50:46

+0

@SDLBING源代码在这里:http://android.git.kernel.org/?p=platform/packages/wallpapers/LivePicker.git;a=tree;f=src/com/android/wallpaper/livepicker – 2011-05-13 07:56:55