Android - 权限
权限声明在 AndroidManifest.xml 清单文件中。
文件格式如下:
运行应用所需权限在内声明
调用应用所需权限在内声明
声明格式:
使用后缀在特定版本以上的系统中申请权限,使用maxSdkVersion属性限制权限的最高版本。
PackageManager
用于检索与当前设备上安装的应用程序包相关的各种信息的类。您可以通过 Context#getPackageManager 找到此类。
检查权限检查 Activity 是否具有向日历写入数据的权限:
if (ContextCompat.checkSelfPermission(thisActivity, Manifest.permission.WRITE_CALENDAR)
!= PackageManager.PERMISSION_GRANTED) {
// Permission is not granted
}
如果应用具有此权限,该方法将返回 PERMISSION_GRANTED (0x00000000),并且应用可以继续操作。如果应用不具备此权限,该方法将返回 PERMISSION_DENIED (0xffffffff),且应用必须明确要求用户授予权限。
请求权限流程以下代码将检查应用是否具有读取用户联系人的权限。如果没有该权限,它会检查是否应显示需要该权限的解释,如果不需要解释,它会请求该权限:
// Here, thisActivity is the current activity
if (ContextCompat.checkSelfPermission(thisActivity,
Manifest.permission.READ_CONTACTS)
!= PackageManager.PERMISSION_GRANTED) {
// Permission is not granted
// Should we show an explanation?
if (ActivityCompat.shouldShowRequestPermissionRationale(thisActivity,
Manifest.permission.READ_CONTACTS)) {
// Show an explanation to the user *asynchronously* -- don't block
// this thread waiting for the user's response! After the user
// sees the explanation, try again to request the permission.
} else {
// No explanation needed; request the permission
ActivityCompat.requestPermissions(thisActivity,
new String[]{Manifest.permission.READ_CONTACTS},
MY_PERMISSIONS_REQUEST_READ_CONTACTS);
// MY_PERMISSIONS_REQUEST_READ_CONTACTS is an
// app-defined int constant. The callback method gets the
// result of the request.
}
} else {
// Permission has already been granted
}
系统显示的提示说明了您的应用需要访问的权限组,而不是具体权限。
注意:当您的应用调用 requestPermissions() 时,系统会向用户显示一个标准对话框。您的应用无法配置或更改该对话框。如果您需要向用户提供任何信息或解释,您应该在调用 requestPermissions() 之前这样做,如解释为什么应用需要权限中所述。
处理权限请求响应当用户响应您应用的权限请求时,系统会调用您应用的 onRequestPermissionsResult() 方法,在调用过程中向其传递用户响应。您的应用必须替换该方法,以查明是否已向其授予相应权限。在回调过程中传递的请求代码与传递给 requestPermissions() 的请求代码相同。例如,如果应用请求 READ_CONTACTS 访问权限,则它可能采用以下回调方法:
@Override
public void onRequestPermissionsResult(int requestCode,
String[] permissions, int[] grantResults) {
switch (requestCode) {
case MY_PERMISSIONS_REQUEST_READ_CONTACTS: {
// If request is cancelled, the result arrays are empty.
if (grantResults.length > 0
&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// permission was granted, yay! Do the
// contacts-related task you need to do.
} else {
// permission denied, boo! Disable the
// functionality that depends on this permission.
}
return;
}
// other 'case' lines to check for other
// permissions this app might request.
}
}
来自 https://developer.android.com/training/permissions/requesting?hl=zh-cn#java
常用权限 权限清单 Manifest.permissionhttps://developer.android.com/reference/android/Manifest.permission.html?hl=zh-cn
public static final class Manifest.permission
java.lang.Object
↳ android.Manifest.permission
拨打电话权限
拨打电话是危险权限,需要动态申请 Manifest.permission.CALL_PHONE;
实现电话拨打:
Intent intent = new Intent(Intent.ACTION_CALL);
intent.setData(Uri.parse("tel:10086"));
startActivity(intent);
读写外部文件权限
https://developer.android.com/training/data-storage/files/external?hl=zh-cn
Android - 文件存储
Android 包含以下访问外部存储中的文件的权限:
READ_EXTERNAL_STORAGE:允许应用访问外部存储设备中的文件。
WRITE_EXTERNAL_STORAGE:允许应用在外部存储设备中写入和修改文件。拥有此权限的应用也会自动获得 READ_EXTERNAL_STORAGE 权限。
保存到公开目录
如果要将文件保存到其他应用可以访问的外部存储上,请使用以下 API 之一:
如果要保存照片、音频文件或视频剪辑,请使用 MediaStore API。 如果要保存任何其他文件(如 PDF 文档),请使用 ACTION_CREATE_DOCUMENT intent,这是存储访问框架的一部分。如果您不希望媒体扫描程序发现您的文件,请在特定于应用的目录中添加名为 .nomedia 的空文件(请注意文件名中的句点前缀)。这可以防止媒体扫描程序读取您的媒体文件并通过 MediaStore API 将它们提供给其他应用。
保存到私有目录以下代码段展示了如何为应用创建私有相册目录:
public File getPrivateAlbumStorageDir(Context context, String albumName) {
// Get the directory for the app's private pictures directory.
File file = new File(context.getExternalFilesDir(
Environment.DIRECTORY_PICTURES), albumName);
if (!file.mkdirs()) {
Log.e(LOG_TAG, "Directory not created");
}
return file;
}
请务必使用由 DIRECTORY_PICTURES 这类 API 常量提供的目录名称。这些目录名称可确保系统正确地处理这些文件。例如,保存在 DIRECTORY_RINGTONES 中的文件会被系统媒体扫描程序归类为铃声,而不是音乐。
如果没有适合您文件的预定义子目录名称,您可以调用 getExternalFilesDir() 并传入 null。这会返回应用在外部存储上的专用目录的根目录。
作者:学优
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341