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 }
分类:
Android 权限
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 【杂谈】分布式事务——高大上的无用知识?