一、Android相册权限申请
1、Android中提供了一个简单的方法来检查和请求权限 - checkSelfPermission() 和 requestPermissions()方法。在使用相册和图库时,检查相册权限是必要的。检查相册权限的代码如下:
if (ContextCompat.checkSelfPermission(this,Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this,
new String[] { Manifest.permission.READ_EXTERNAL_STORAGE },
MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE);
}
其中 MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE 是请求码,开发人员可以自己定义。
2、如果用户没有授权,应用程序会显示一个权限申请窗口。
二、Android相册下载
1、Android提供了通过getContentResolver()方法从相册中查询图像的方法。获取相册中图片的代码如下:
String[] projection = { MediaStore.Images.Media._ID,
MediaStore.Images.Media.BUCKET_DISPLAY_NAME,
MediaStore.Images.Media.DATE_TAKEN,
MediaStore.Images.Thumbnails.DATA };
Cursor cursor = getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
projection, null, null, MediaStore.Images.Media.DATE_TAKEN+" DESC");
2、获取到cursor对象后就可以循环遍历查询到的图片。从游标中获取ID并生成URI,就可以直接在应用程序中显示图像,如下所示:
long imageId = cursor.getLong(
cursor.getColumnIndexOrThrow(MediaStore.Images.Media._ID));
Uri imageUri = ContentUris.withAppendedId(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
imageId);
三、Android相册权限限制与解除
1、在应用程序中将用户重定向到应用程序管理器并请求取消权限。在 Android 6.0 称为 Donut 的该问题中,用户可以在设备的设置中取消应用程序的权限。在 Android 7.0 Nougat 中,用户可以更改已授予的权限,但无法取消授权,只能在应用程序管理器中重新启用权限。
在应用程序中请求取消权限的代码如下:
Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS,
Uri.fromParts("package", getPackageName(), null));
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
2、有时候用户选择取消授权后想再次授权,可以在代码中异步地请求权限。异步请求相册权限的代码如下:
ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
REQUEST_CODE_WRITE_EXTERNAL_STORAGE_PERMISSIONS);
四、Android网络权限
1、使用网络通信需要在 AndroidManifest.xml 文件中添加网络权限:
<uses-permission android:name="android.permission.INTERNET" />
2、使用HttpURLConnection实现HTTP请求。代码示例如下:
URL url = new URL("http://www.example.com/path/to/api");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
conn.setConnectTimeout(5000);
conn.setReadTimeout(5000);
五、Android权限监控选取
1、Android提供了一个包含系统权限信息的类 - PackageManager。开发人员可以使用此类获取设备上当前应用的权限列表,如下所示:
PackageManager packageManager = getPackageManager();
PackageInfo packageInfo = packageManager.getPackageInfo("com.example.appName", PackageManager.GET_PERMISSIONS);
String[] requestedPermissions = packageInfo.requestedPermissions;
2、可以使用 ContentObserver 监听权限更改,并在更改时执行操作。代码示例如下:
ContentObserver contentObserver = new ContentObserver(new Handler()) {
public void onChange(boolean selfChange) {
// perform operation
}
};
getContentResolver().registerContentObserver(Settings.System.CONTENT_URI, true, contentObserver);