日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

android 权限动态申请

發布時間:2023/12/10 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android 权限动态申请 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

名字其實有點讓人感覺高大上"權限動態申請",其實也沒有什么,

以前做Android程序的時候,比如需要打開攝像頭

那么需要在

?

?

然后就可以了,

但是Android6.0之后呢,有些權限必須手動讓用戶同意才可以,哪些權限需要用戶手動同意,哪些不需要這里大家自行百度

現在說一下

直接上程序吧

public void checkPermission(){int targetSdkVersion = 0;String[] PermissionString={Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.CAMERA};try {final PackageInfo info = this.getPackageManager().getPackageInfo(this.getPackageName(), 0);targetSdkVersion = info.applicationInfo.targetSdkVersion;//獲取應用的Target版本} catch (PackageManager.NameNotFoundException e) {e.printStackTrace(); // Log.e("err", "檢查權限_err0"); }if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {//Build.VERSION.SDK_INT是獲取當前手機版本 Build.VERSION_CODES.M為6.0系統//如果系統>=6.0if (targetSdkVersion >= Build.VERSION_CODES.M) {//第 1 步: 檢查是否有相應的權限boolean isAllGranted = checkPermissionAllGranted(PermissionString);if (isAllGranted) {//Log.e("err","所有權限已經授權!");return;}// 一次請求多個權限, 如果其他有權限是已經授予的將會自動忽略掉ActivityCompat.requestPermissions(this,PermissionString, 1);}}}/*** 檢查是否擁有指定的所有權限*/private boolean checkPermissionAllGranted(String[] permissions) {for (String permission : permissions) {if (ContextCompat.checkSelfPermission(this, permission) != PackageManager.PERMISSION_GRANTED) {// 只要有一個權限沒有被授予, 則直接返回 false//Log.e("err","權限"+permission+"沒有授權");return false;}}return true;}//申請權限結果返回處理 @Overridepublic void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {super.onRequestPermissionsResult(requestCode, permissions, grantResults);if (requestCode == 1) {boolean isAllGranted = true;// 判斷是否所有的權限都已經授予了for (int grant : grantResults) {if (grant != PackageManager.PERMISSION_GRANTED) {isAllGranted = false;break;}}if (isAllGranted) {// 所有的權限都授予了Log.e("err","權限都授權了");} else {// 彈出對話框告訴用戶需要權限的原因, 并引導用戶去應用權限管理中手動打開權限按鈕//容易判斷錯//MyDialog("提示", "某些權限未開啟,請手動開啟", 1) ; }}}

?

?

程序啟動的時候檢查權限

?

現在說一下流程

?

?

說一下,如果調用這個

就會執行

private void MyDialog(final String str1, final String str2, final int index) {android.support.v7.app.AlertDialog.Builder AlertDialogBuilder = new android.support.v7.app.AlertDialog.Builder(MainActivity.this, R.style.MyDialog);View mView = LayoutInflater.from(MainActivity.this).inflate(R.layout.dialog_config_button2, null);final TextView mTextView1 = mView.findViewById(R.id.tvdogcon1);final TextView mTextView2 = mView.findViewById(R.id.tvdogcon2);final Button mButton1 = mView.findViewById(R.id.btdogcon1);final Button mButton2 = mView.findViewById(R.id.btdogcon2);mButton2.setText("前去設置");mButton2.setTextColor(Color.BLUE);mButton1.setText("取消");mButton1.setTextColor(Color.BLACK);mTextView1.setText(str1);mTextView2.setText(str2);AlertDialogBuilder.setView(mView);//對話框加載視圖 final android.support.v7.app.AlertDialog alertdialogbuilder = AlertDialogBuilder.create();alertdialogbuilder.setCanceledOnTouchOutside(false);//點擊外圍不消失 alertdialogbuilder.show();mButton1.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {alertdialogbuilder.dismiss();}});mButton2.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {alertdialogbuilder.dismiss();Intent intent = new Intent();intent.setAction("android.settings.APPLICATION_DETAILS_SETTINGS");intent.setData(Uri.fromParts("package", getPackageName(), null));startActivity(intent);}});}

應用設置界面

?

?

?

然后就沒了,

現在說一下BUG問題

?大家百度

checkSelfPermission

總是返回 false ?很多說這個問題的

這就導致一個問題,如果用戶進入?應用設置界面 設置了允許對應的權限 ?然后回到程序,

結果...總是調用這個....這就太奇葩了

?

?后來我發現,同時滿足這兩條條件再檢測就不會了,可以準確的檢查,

但是我重復安裝了幾次我的APP,還是有個奇怪的問題,前面我都拒絕,然后就會提示進入 ?應用管理界面

按理說默認應該是詢問狀態,,但是卻是 ?顯示的允許......然后發現必須自己重復點擊一下拒絕,然后再點擊一下允許

回到界面后才會正常........按理來說用戶不會像我似的,因為我一直在調試

但是確實是一個問題.....

?

?

?

?

?

?但是還有個問題,那天讓一個朋友測試,發現另一個問題,,如果在安裝的時候就修改,不允許任何權限,,那么安裝完以后,也不會進入

?

?

?所以最終決定,把這里屏蔽了

因為現在還不能準確的判斷

以后判斷呢只能是異常捕獲了........

假如說,用戶沒有同意攝像頭權限,然后執行攝像頭的一些程序的時候肯定會報錯

然后在異常捕獲里提醒用戶 ?跳轉到應用權限管理里面去打開權限

?

轉載于:https://www.cnblogs.com/yangfengwu/p/9304373.html

總結

以上是生活随笔為你收集整理的android 权限动态申请的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。