返回
Android 14 媒体权限变革:用户控制权提升,隐私保护加强
Android
2023-09-22 10:28:27
Android 14 媒体权限变革:赋予用户更多控制权
前言
在 Android 14 之前,应用程序请求访问视觉媒体时,用户只有两个选择:授予或拒绝。这导致隐私问题,因为用户可能不想让应用程序访问所有媒体。 Android 14 引入了更精细的控制,让用户可以选择性地授予访问权限。
变革详情
在 Android 14 中,用户可以授予 "选择照片和视频" 权限。这允许应用程序仅访问用户选择的照片和视频。当用户再次授予权限时,应用程序只能访问先前选择的内容以及之后添加的新内容。
对用户的好处
这一变化为用户提供了重要的隐私优势:
- 更精细的控制: 用户可以决定哪些媒体可被应用程序访问。
- 减少隐私风险: 应用程序无法访问未经用户许可的内容。
- 防止滥用: 这有助于防止应用程序滥用媒体权限。
为应用程序实现变更
要为应用程序实施这些变化,需要进行以下修改:
- 在清单文件中添加新权限请求
- 实现一个处理用户选择媒体权限方式的 Activity
- 实现一个访问用户选择内容的 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 政策并为用户提供最佳体验。
常见问题解答
-
这些变化如何影响现有的应用程序?
现有应用程序必须更新才能实施这些变化。如果未更新,应用程序在请求媒体权限时将收到错误。
-
用户如何选择照片和视频?
应用程序将向用户显示一个对话框,其中包含允许其选择照片和视频的选项。
-
应用程序如何访问用户选择的内容?
应用程序可以使用 ContentResolver 来访问用户选择的内容。
-
这些变化是否适用于所有类型的媒体?
这些变化适用于图像和视频。
-
应用程序如何确保用户不会重新选择相同的内容?
应用程序可以使用数据库或其他存储机制来跟踪已选择的内容。