Java 如何从DCIM目录中随机选取一幅图像,将其设置为壁纸?

Java 如何从DCIM目录中随机选取一幅图像,将其设置为壁纸?,java,android,Java,Android,我在从DCIM目录中随机选取图像时遇到问题 以下是我的代码(在MainActivity.java中): 在舱单中,我声明: <uses-permission android:name="android.permission.SET_WALLPAPER"/> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> activity_m

我在从DCIM目录中随机选取图像时遇到问题

以下是我的代码(在MainActivity.java中):

在舱单中,我声明:

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

activity_main.xml上没有任何内容

我的问题是:

位图位图=imagedir[indice]

我无法成功地在随机和位图之间搭建桥梁


有人有想法吗?

所以,现在它起作用了,我找到了两个问题的解决方案:

  • minSDK API23至API22: 最简单的方法是从头开始使用正确的minSDK API22重新创建一个全新的项目,以摆脱这一点。Java表示getExternalStoragePublicDirectory已被弃用,但下面的代码完全可以工作

  • 右代码: 这是:




每次启动应用程序时,壁纸都会随机更改。图像存储在DCIM目录中。DCIM目录中只有图像,没有子目录。不要忘记在清单中声明用户的权限。

Bimap bitmap=imagedir.listFiles()[indice]但是。。。DCIM目录中的图像通常不多。DCIM/Camera有更多功能。
String secStore=System.getenv(“辅助存储”);File imagedir=新文件(secStore+“/DCIM”)错误代码。替换为
文件imagedir=Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY\u DCIM)和。。DCIM目录包含子目录。您将把细分曲面设置为位图?谢谢blackapps。这里的答案是:1/完成,但我得到一个错误,
必需的类型:位图,提供的是:File
;2&4/在当前情况下,DCIM没有子目录,只有图像;3/谢谢,我替换了代码,它很好。---那么你对1/有什么想法吗?
<uses-permission android:name="android.permission.SET_WALLPAPER"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
package com.example.randomwallpaper;

import androidx.appcompat.app.AppCompatActivity;
import android.app.WallpaperManager;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.os.Environment;
import android.widget.Toast;
import java.io.File;
import java.io.IOException;
import java.util.Random;

import static android.os.Environment.getExternalStoragePublicDirectory;

public class MainActivity extends AppCompatActivity {

    Random ran;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        String secStore = System.getenv("SECONDARY_STORAGE");
        File imagedir = getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM);
        int totalNumFiles = imagedir.listFiles().length;   //nb of files in DCIM
        //we pick up one randomly
        ran = new Random();
        int indice = ran.nextInt(totalNumFiles) + 1;

        Bitmap bitmap = BitmapFactory.decodeFile(String.valueOf(imagedir.listFiles()[indice]));
        WallpaperManager manager = WallpaperManager.getInstance(getApplicationContext());
        try {
            manager.setBitmap(bitmap);
            Toast.makeText(getApplicationContext(), "WP set!", Toast.LENGTH_SHORT).show();
        } catch (IOException e) {
            Toast.makeText(getApplicationContext(), "Error!", Toast.LENGTH_SHORT).show();
        }
    }
}