Android Studio 取得相機使用權限 Permission COMERA (含讀取權限結果和開啟應用程式資訊頁面教學)

Android 6.x以後的版本,為了增加手機的安全性,任何取得或是讀寫的動作都需要權限

這片文章就來教大家取得相機權限
(最後面有讀取權限結果和開啟應用程式資訊頁面教學)

Kotlin可以看這篇:Kotlin 取得相機權限

開啟專案之後到AndroidManifest.xml

在裡面加入這行
<uses-permission android:name="android.permission.CAMERA"></uses-permission>



如果你開發的版本是Android 5.X的版本的話到這裡就結束了

但是如果是6.0以上的版本,那請你繼續往下看

回到MainActivity.java先新增一個副程式,名字我這裡是用 getPermissionsCamera


至於為什麼要寫成副程式呢?

因為使用者有可能因為男朋友不讓她吃小火鍋等等的小事,一不爽就把你的權限去掉,如果你剛好沒有檢查到那就GG了,所以最好每開一次相機就檢查一次。

而物件導向也教我們不要把力氣花在寫功能一樣且重複的程式,所以我們把它包裝成副程式,要的時候就可以直接拿來用,減少程式碼行數,也增加程式的易讀性



接下來我們先判斷是否未取得權限(!=)
if(ActivityCompat.checkSelfPermission(this,Manifest.permission.CAMERA)
                != PackageManager.PERMISSION_GRANTED){
}

如果沒有權限的話那我們就跳出視窗,嘗試向使用者取得權限
ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.CAMERA},1);



執行結果:


取得相機權限


好了,寫完了。

其實已經可以收工了,只是有時候使用者會不想給你權限
為了要說服他,所以我們在這裡再加入交談視窗
(可以看這篇文章 交談式視窗AlertDialog教學)
new AlertDialog.Builder(this)
       .setCancelable(false)
       .setTitle("需要相機權限")
       .setMessage("你是不是傻?不給我權限我要怎麼拍照?")
       .setPositiveButton("知道了拉", new DialogInterface.OnClickListener() {
          @Override
          public void onClick(DialogInterface dialogInterface, int i) {
               ActivityCompat.requestPermissions(MainActivity.this,new String[]{Manifest.permission.CAMERA},1);
          }
        })
        .show();



執行結果:


取得相機權限_努力說服他


但是!並不是每個使用者都這麼麻煩,有些人很相信你,看到你需要權限就馬上給你。

對於這些人我們不用去「說服」他

所以我們為了這些人再加一個判斷
if (ActivityCompat.shouldShowRequestPermissionRationale(MainActivity.this,
      Manifest.permission.CAMERA)) {

}else{
    ActivityCompat.requestPermissions(MainActivity.this,new String[]{Manifest.permission.CAMERA},1);
}
if 已經問過了你還死不給
else 第一次來還沒被拒絕過



執行結果:



補充:下面是當使用者授予或拒絕權限時會得到的反應
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);

if (requestCode == 1) {
if (grantResults.length > 0 && grantResults[0] != PackageManager.PERMISSION_GRANTED) {
if (!ActivityCompat.shouldShowRequestPermissionRationale(MainActivity.this, Manifest.permission.CAMERA)) {
Toast.makeText(this, "被永遠拒絕,只能使用者手動給予權限", Toast.LENGTH_LONG).show();
//開啟應用程式資訊,讓使用者手動給予權限
Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
Uri uri = Uri.fromParts("package", getPackageName(), null);
intent.setData(uri);
startActivity(intent);
} else {
Toast.makeText(this, "按下拒絕", Toast.LENGTH_LONG).show();
}
} else {
Toast.makeText(this, "允許權限", Toast.LENGTH_LONG).show();
}
}
}

有任何問題都可以在下面留言

留言