2011-08-31 62 views
1

如何通过程序设置实时墙纸。我想为我的设备设置一个指定的活动墙纸。我模仿LivePicker应用程序中的LiveWallpaperPreview.java。 我的代码是:如何通过程序设置活动墙纸?

公共无效setLiveWallpaperClick(视图v){

Intent intent = new Intent(WallpaperService.SERVICE_INTERFACE); 
    intent.setClassName("com.android.wallpaper", "com.android.wallpaper.galaxy.GalaxyWallpaper"); 
try { 
    mWallpaperManager.getIWallpaperManager().setWallpaperComponent(
      intent.getComponent()); 

} catch (RemoteException e) { 
    e.printStackTrace(); 
    // do nothing 
} catch (RuntimeException e) { 
    e.printStackTrace(); 
} 
finish(); 

} 而在manifest.xml的权限是:

<uses-permission android:name="android.permission.SET_WALLPAPER_COMPONENT" /> 
    <uses-permission android:name="android.permission.BIND_WALLPAPER" /> 
    <uses-permission android:name="android.permission.SET_WALLPAPER" /> 

但它不能在工作我的应用程序。代码是否正确?

+0

你是否用期望的壁纸替换当前壁纸?例如,如果你有另一个下载的壁纸,你知道他的包名,你可以通过你的应用程序设置一个? – Naskov

回答

3

谢谢!我找到了根本原因:代码是正确的。但是apk必须推到/ system/app目录,它可以工作。如果apk安装在/ data/app中,则无法工作。我认为/ system/app和/ data/app之间有一些不同的权限。

+0

所以你的解决方案? – Fakher

0

使用下面的代码来设置自定义动态壁纸:

意向意图=新 意图(WallpaperManager.ACTION_CHANGE_LIVE_WALLPAPER); intent.putExtra(WallpaperManager.EXTRA_LIVE_WALLPAPER_COMPONENT, new ComponentName(this,MyWallpaperService.class)); startActivity(意向);

与其他权限由@Judy

以上建议

这里MyWallpaperService是自定义墙纸的服务。