返回

Android 14 媒体权限变革:用户控制权提升,隐私保护加强

Android

Android 14 媒体权限变革:赋予用户更多控制权

前言

在 Android 14 之前,应用程序请求访问视觉媒体时,用户只有两个选择:授予或拒绝。这导致隐私问题,因为用户可能不想让应用程序访问所有媒体。 Android 14 引入了更精细的控制,让用户可以选择性地授予访问权限。

变革详情

在 Android 14 中,用户可以授予 "选择照片和视频" 权限。这允许应用程序仅访问用户选择的照片和视频。当用户再次授予权限时,应用程序只能访问先前选择的内容以及之后添加的新内容。

对用户的好处

这一变化为用户提供了重要的隐私优势:

  • 更精细的控制: 用户可以决定哪些媒体可被应用程序访问。
  • 减少隐私风险: 应用程序无法访问未经用户许可的内容。
  • 防止滥用: 这有助于防止应用程序滥用媒体权限。

为应用程序实现变更

要为应用程序实施这些变化,需要进行以下修改:

  1. 在清单文件中添加新权限请求
  2. 实现一个处理用户选择媒体权限方式的 Activity
  3. 实现一个访问用户选择内容的 ContentResolver

代码示例

以下代码示例演示了如何实现这些步骤:

清单文件中的权限请求:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.myapp">

    <uses-permission android:name="android.permission.READ_MEDIA_IMAGES" />
    <uses-permission android:name="android.permission.READ_MEDIA-VIDEO" />

</manifest>

处理用户选择媒体权限方式的 Activity:

public class MediaPermissionsActivity extends AppCompatActivity {

    private static final int REQUEST_CODE_MEDIA_PERMISSIONS = 100;

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

        if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_MEDIA_IMAGES) == PackageManager.PERMISSION_GRANTED &&
                ContextCompat.checkSelfPermission(this, Manifest.permission.READ_MEDIA_VIDEO) == PackageManager.PERMISSION_GRANTED) {
            // 权限已授予
        } else {
            // 请求权限
            ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_MEDIA_IMAGES, Manifest.permission.READ_MEDIA_VIDEO}, REQUEST_CODE_MEDIA_PERMISSIONS);
        }
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);

        if (requestCode == REQUEST_CODE_MEDIA_PERMISSIONS) {
            if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED && grantResults[1] == PackageManager.PERMISSION_GRANTED) {
                // 权限已授予
            } else {
                // 权限被拒绝
            }
        }
    }
}

访问用户选择内容的 ContentResolver:

public class MediaContentResolver {

    private ContentResolver contentResolver;

    public MediaContentResolver(Context context) {
        this.contentResolver = context.getContentResolver();
    }

    public List<Photo> getPhotos() {
        List<Photo> photos = new ArrayList<>();

        Cursor cursor = contentResolver.query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, null, null, null, null);

        while (cursor.moveToNext()) {
            Photo photo = new Photo();
            photo.setId(cursor.getLong(cursor.getColumnIndex(MediaStore.Images.Media._ID)));
            photo.setFilePath(cursor.getString(cursor.getColumnIndex(MediaStore.Images.Media.DATA)));
            photo.setDateTaken(cursor.getLong(cursor.getColumnIndex(MediaStore.Images.Media.DATE_TAKEN)));

            photos.add(photo);
        }

        cursor.close();

        return photos;
    }

    public List<Video> getVideos() {
        List<Video> videos = new ArrayList<>();

        Cursor cursor = contentResolver.query(MediaStore.Video.Media.EXTERNAL_CONTENT_URI, null, null, null, null);

        while (cursor.moveToNext()) {
            Video video = new Video();
            video.setId(cursor.getLong(cursor.getColumnIndex(MediaStore.Video.Media._ID)));
            video.setFilePath(cursor.getString(cursor.getColumnIndex(MediaStore.Video.Media.DATA)));
            video.setDateTaken(cursor.getLong(cursor.getColumnIndex(MediaStore.Video.Media.DATE_TAKEN)));

            videos.add(video);
        }

        cursor.close();

        return videos;
    }
}

结论

Android 14 媒体权限变革赋予用户更多控制权,保护其隐私并防止应用程序滥用媒体访问权限。作为应用程序开发者,至关重要的是为您的应用程序实施这些变化,以符合 Android 14 政策并为用户提供最佳体验。

常见问题解答

  1. 这些变化如何影响现有的应用程序?

    现有应用程序必须更新才能实施这些变化。如果未更新,应用程序在请求媒体权限时将收到错误。

  2. 用户如何选择照片和视频?

    应用程序将向用户显示一个对话框,其中包含允许其选择照片和视频的选项。

  3. 应用程序如何访问用户选择的内容?

    应用程序可以使用 ContentResolver 来访问用户选择的内容。

  4. 这些变化是否适用于所有类型的媒体?

    这些变化适用于图像和视频。

  5. 应用程序如何确保用户不会重新选择相同的内容?

    应用程序可以使用数据库或其他存储机制来跟踪已选择的内容。