You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android(Java)如何获取主屏幕背景图片并设置为Activity背景

Android 获取系统主屏幕壁纸并设置为Activity背景的实现方法

1. 清单文件声明权限

在AndroidManifest.xml中添加对应权限:

<!-- Android 13及以上版本 -->
<uses-permission android:name="android.permission.READ_MEDIA_IMAGES" />
<!-- Android 12及以下版本 -->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" android:maxSdkVersion="32" />

2. 动态申请权限

Android 6.0(API 23)及以上版本需要动态申请存储相关权限,在目标Activity中添加如下逻辑:

// 权限请求码
private static final int PERMISSION_REQUEST_CODE = 1001;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    
    // 检查权限
    if (ContextCompat.checkSelfPermission(this, Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU ? Manifest.permission.READ_MEDIA_IMAGES : Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
        // 申请权限
        ActivityCompat.requestPermissions(this,
            Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU ? new String[]{Manifest.permission.READ_MEDIA_IMAGES} : new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},
            PERMISSION_REQUEST_CODE);
    } else {
        // 已有权限,直接获取壁纸
        loadWallpaperToBackground();
    }
}

// 处理权限申请结果
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    if (requestCode == PERMISSION_REQUEST_CODE) {
        if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
            loadWallpaperToBackground();
        }
    }
}

3. 获取系统壁纸并设置为Activity背景

private void loadWallpaperToBackground() {
    WallpaperManager wallpaperManager = WallpaperManager.getInstance(this);
    // 获取壁纸Drawable
    Drawable wallpaperDrawable = wallpaperManager.getDrawable();
    // 给Activity根布局设置背景
    View rootView = findViewById(android.R.id.content);
    rootView.setBackground(wallpaperDrawable);
}

注意事项

  • 如果用户设置的是动态壁纸,getDrawable()返回的是动态Drawable实例,设置为背景后会跟随系统动态壁纸同步刷新;如果只需要静态快照,可以替换为wallpaperManager.peekDrawable()获取静态壁纸。
  • 部分定制ROM对壁纸获取做了额外权限限制,若出现获取失败的情况,需要适配对应ROM的特殊权限申请逻辑。
  • 壁纸分辨率普遍较高,建议在子线程中做裁剪、缩放处理后再设置到UI,避免主线程阻塞引发ANR。

内容的提问来源于stack exchange,提问作者mSafdel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 22:21:01