如何在安卓系统中将另一个应用程序设置为壁纸抽屉



在android中通过壁纸选择器选择壁纸时,操作系统会提示用户从壁纸列表中进行选择,据我所知,一些壁纸应用程序,如壁纸引擎,但在通过代码设置壁纸时,似乎只能将可绘制的图像设置为壁纸。有没有任何方法可以打开这个系统提示等,并允许用户选择壁纸或壁纸应用程序?

目前看来,用这种方法选择图像并通过这种方法使用是可能的。

我想这可以用android工作室中指定的ACTION_LIVE_WALLPAPER_CHOOSER常量来完成,但我找不到关于如何用它创建系统选择器提示的文档?

需要澄清的是,该应用程序本身不应该是壁纸显示器,而是它只设置壁纸可绘制或另一个独立的壁纸抽屉应用程序。

编辑:壁纸/引擎必须由用户预先选择,之后应用程序将在某个时间点自动应用

编辑2:我测试了之前在SO上发布的一些方法,但无法使它们在API 30上工作,即使在最后一次尝试直接复制粘贴代码时也是如此。代码取自此处,可以概括为:

PackageManager m_package_manager = getContext().getPackageManager();
List<ResolveInfo> available_wallpapers_list =
m_package_manager.queryIntentServices(
new Intent(WallpaperService.SERVICE_INTERFACE),
PackageManager.GET_META_DATA);
return available_wallpapers_list;

即使已经安装了一些额外的实时壁纸应用程序,返回的列表也是空的

如果您将此意向过滤器添加到清单中的活动中,它应该出现在选择器中:

<activity
android:name=".ChangeWallpaperActivity"
android:exported="true">
<intent-filter>
<!-- This is the important part -->
<action android:name="android.intent.action.SET_WALLPAPER" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>

您可以使用以下代码进行测试:

Intent intent = new Intent("android.intent.action.SET_WALLPAPER");
try {
startActivity(intent);
} catch (ActivityNotFoundException e) {
Log.w(TAG, "No activity found to handle " + intent.toString());
}

最新更新