在 Android 12 中,'MediaScannerReceiver' 被弃用了,取而代之的是新的媒体扫描 API。这个 API 使用了新的 'MediaStore' 类来处理媒体文件的扫描和访问。

要使用新的媒体扫描 API,你可以使用以下步骤:

  1. 导入 'androidx.appcompat.app.AppCompatActivity' 和 'androidx.core.content.ContextCompat' 包。
  2. 在 'AndroidManifest.xml' 文件中添加以下权限:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
  1. 在你的 Activity 类中,实现以下方法来处理媒体扫描:
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.content.ContextCompat;
import android.Manifest;
import android.content.pm.PackageManager;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.provider.MediaStore;

public class MainActivity extends AppCompatActivity {

    private static final int REQUEST_PERMISSION = 1;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // 检查读写外部存储的权限
        if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE)
                != PackageManager.PERMISSION_GRANTED ||
                ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)
                        != PackageManager.PERMISSION_GRANTED) {
            requestPermissions(new String[]{
                    Manifest.permission.READ_EXTERNAL_STORAGE,
                    Manifest.permission.WRITE_EXTERNAL_STORAGE
            }, REQUEST_PERMISSION);
        } else {
            scanMediaFiles();
        }
    }

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

    // 扫描媒体文件
    private void scanMediaFiles() {
        Uri mediaUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
        String[] projection = {MediaStore.Images.Media._ID, MediaStore.Images.Media.DATA};
        Cursor cursor = getContentResolver().query(mediaUri, projection, null, null, null);
        if (cursor != null && cursor.moveToFirst()) {
            do {
                String filePath = cursor.getString(cursor.getColumnIndex(MediaStore.Images.Media.DATA));
                // 处理媒体文件路径
                // ...
            } while (cursor.moveToNext());
            cursor.close();
        }
    }
}

在 'scanMediaFiles' 方法中,你可以使用 'MediaStore' 类提供的方法来查询和处理媒体文件。在这个例子中,我们使用 'MediaStore.Images.Media.EXTERNAL_CONTENT_URI' 查询图片文件,并以 'MediaStore.Images.Media.DATA' 作为列投影来获取文件路径。

请注意,此示例中仅处理了读写外部存储的权限请求和媒体文件的扫描。根据你的需求,你可能需要处理其他权限请求并使用其他 'MediaStore' 类中的方法来处理不同类型的媒体文件。

Android 12 媒体扫描 API:MediaScannerReceiver 的替代方案

原文地址: https://www.cveoy.top/t/topic/pQQt 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录