Android 申请权限示例

1.在Mainifest.xml中添加

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
 3     xmlns:dist="http://schemas.android.com/apk/distribution"
 4     package="com.example.ble">
 5 
 6     <dist:module dist:instant="true" />
 7 
 8     <uses-permission android:name="android.permission.BLUETOOTH"/>
 9     <uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
10     <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
11     <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
12 
13     <uses-feature android:name="android.hardware.bluetooth_le" android:required="true"/>
14 
15     <application
16         android:allowBackup="true"
17         android:icon="@mipmap/bluetooth"
18         android:label="@string/app_name"
19         android:roundIcon="@mipmap/ic_launcher_round"
20         android:supportsRtl="true"
21         android:theme="@style/AppTheme">
22         <activity android:name=".MainActivity">
23             <intent-filter>
24                 <action android:name="android.intent.action.MAIN" />
25 
26                 <category android:name="android.intent.category.LAUNCHER" />
27             </intent-filter>
28         </activity>
29     </application>
30 
31 </manifest>

2.在activity中申请

 1     private fun checkPermissions(): Boolean {
 2         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
 3             val permissions = arrayOf<String>(
 4                     Manifest.permission.GET_ACCOUNTS,
 5                     Manifest.permission.ACCOUNT_MANAGER,
 6                     Manifest.permission.WRITE_SYNC_SETTINGS,
 7             )
 8             val BLE_PERMISSION = 8902
 9             var permissionCheck = 0
10             for (permission in permissions) {
11                 permissionCheck += checkSelfPermission(permission)
12             }
13             if (permissionCheck != PackageManager.PERMISSION_GRANTED) {
14                 requestPermissions(permissions, BLE_PERMISSION) //requestPermissions是Activity中的api
15                 return false
16             }
17         }
18         return true
19     }
20 
21     override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<String?>, grantResults: IntArray) {
22         super.onRequestPermissionsResult(requestCode, permissions, grantResults)
23         val BLE_PERMISSION = 8902
24         if (requestCode == BLE_PERMISSION) {
25             //boolean ret = true;
26             //for (int result : grantResults){//检查所有权限
27             //    if (result != PackageManager.PERMISSION_GRANTED){
28             //        ret = false;
29             //        break;
30             //    }
31             //}
32             if (grantResults.size > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {  //权限申请成功。
33                 //成功...
34             } else {
35                 Log.e("MainActivity", "onRequestPermissionsResult: result = false")
36             }
37         }
38     }

3.在Fragment中申请

3.1申请多权限

 1     private fun checkPermissions(): Boolean {
 2 
 3         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
 4             val permissions = arrayOf(
 5                 Manifest.permission.WRITE_EXTERNAL_STORAGE
 6             )
 7             val PERMISSION_CODE = 8902
 8 
 9             var permissionCheck = 0
10 
11             if (context == null ) return false
12 
13             for (permission in permissions) {
14                 var check : Int? = context?.checkSelfPermission(permission)
15                 if (check != null) {
16                     permissionCheck += check
17                 }else{
18                     return false
19                 }
20             }
21             if (permissionCheck != PackageManager.PERMISSION_GRANTED) {
22                 requestPermissions(permissions, PERMISSION_CODE)
23                 return false
24             }
25         }
26         return true
27     }
28 
29     @RequiresApi(api = Build.VERSION_CODES.M)
30     override fun onRequestPermissionsResult(
31         requestCode: Int,
32         permissions: Array<String>,
33         grantResults: IntArray
34     ) {
35         super.onRequestPermissionsResult(requestCode, permissions, grantResults)
36         val PERMISSION_CODE = 8902
37 
38         if (requestCode == PERMISSION_CODE) {
39             //var ret = 0
40             //for (result in grantResults) {//检查所有权限
41             //    ret += result
42             //    if (result != PackageManager.PERMISSION_GRANTED) {
43             //        break
44             //    }
45             //}
46             if (grantResults.isNotEmpty() && grantResults[0] == PackageManager.PERMISSION_GRANTED) {  //权限申请成功。
47                 parseJson("test.json")
48             }
49         }
50     }

3.2 申请单个权限

 1     @OnClick(R.id.btn_analy_import)
 2     public void onImportClicked(View view){
 3         if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M) {
 4             final int permissionID = 63358;
 5             int write = getActivity().checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE);
 6             if (write != PackageManager.PERMISSION_GRANTED) {
 7                 String[] permissions = {Manifest.permission.WRITE_EXTERNAL_STORAGE};
 8                 requestPermissions(permissions, permissionID);//fragment基类中的函数
 9             }else{
10                 //业务函数
11             }
12         }
13     }
14 
15     @Override
16     public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
17         super.onRequestPermissionsResult(requestCode, permissions, grantResults);
18         Log.e("CompareFrgmt", "onRequestPermissionsResult: requestCode = " + requestCode );
19         final int permissionID = 63358;
20         if (requestCode == permissionID && grantResults != null) {
21             if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
22                 //业务函数
23             } else {
24                 Snackbar.make(operatorPager, R.string.err_permission_denied,Snackbar.LENGTH_LONG).show();
25             }
26         }
27     }

 

posted @ 2015-09-09 19:07  f9q  阅读(836)  评论(0编辑  收藏  举报