【问题标题】:Android LiveWallpaper From Activity来自 Activity 的 Android LiveWallpaper
【发布时间】:2013-11-13 13:20:36
【问题描述】:
我正在尝试做的是带有一些动作的动态壁纸(已经完成)但问题就在那里......我已经在 Activity 中做到了,其中“动作”是一个扩展视图和 Activity 的类setContentView() 方法不是某种布局......它是这个View。我现在要做的是创建选项来将该活动设置为壁纸,但我不知道如何。这是我在加载View 的主Activity 中的onCreate() 方法。我希望那是墙纸..那么我怎样才能将其设置为墙纸呢?
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
SnowFall snowFallView = new SnowFall(this);
setContentView(snowFallView);
snowFallView.setBackgroundDrawable(getResources().getDrawable(
R.drawable.christmas));
}
这是我要创建的示例应用程序:https://play.google.com/store/apps/details?id=com.chiralcode.wallpaper.autumn&hl=bg
【问题讨论】:
标签:
java
android
android-activity
android-service
live-wallpaper
【解决方案1】:
您是否将壁纸实现为服务?了解基础知识 - 查看 Lars Vogel 的动态壁纸教程here
简而言之,你可以有意图地设置壁纸:
Intent intent = new Intent(WallpaperManager.ACTION_CHANGE_LIVE_WALLPAPER);
intent.putExtra(WallpaperManager.EXTRA_LIVE_WALLPAPER_COMPONENT, new ComponentName(this, MyWallpaperService.class));
startActivity(intent);
您需要根据您的类名调整上述内容,并记住在您的 AndroidManifest 中拥有 android.permission.BIND_WALLPAPER 权限,但请再次阅读他的教程。
【解决方案2】:
通过activity启动壁纸服务,following是完美的工作,你也可以把following放在onclick(...)中,如果你启动livewallpaper(你自己的动态壁纸直接通过一键点击) 你只需编写以下代码,
btnInstallWallpaper.setOnClickListener(new OnClickListener() {
@TargetApi(Build.VERSION_CODES.JELLY_BEAN)
@SuppressLint("InlinedApi")
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Intent intent = new Intent();
if (android.os.Build.VERSION.SDK_INT >= 16)
{
intent.setAction("android.service.wallpaper.CHANGE_LIVE_WALLPAPER");
intent.putExtra("android.service.wallpaper.extra.LIVE_WALLPAPER_COMPONENT", new ComponentName("com.example.wall", "com.example.wall.WallpaperService"));
} else
intent.setAction("android.service.wallpaper.LIVE_WALLPAPER_CHOOSER");
intent.putExtra("android.service.wallpaper.extra.LIVE_WALLPAPER_COMPONENT", new ComponentName("com.example.wall", "com.example.wall.WallpaperService")); // package + classname
//}
startActivity(intent);
}
});