1、這個問題和android在2017年2月間的信件問題相關,也就是說,遇到重要權限之前都要改程式(見教學)。
2、有幾種錯誤訊息,本例是在Camera照像時沒有產生圖片的情況,例如(FileNotFoundException):
首先,程式本身沒有問題,但要增加判斷,是因為6.0版本要增加判斷是否給予權限,不選的話就是無權限。在6.0版本的權限管控變得比較嚴格,以下會慢慢說明。
1、在存檔案、圖片前加上這段程式,若無權限會跳出詢問框
int permission = ActivityCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE);
if (permission != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(
this,
new String[] {
Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.READ_EXTERNAL_STORAGE},
REQUEST_EXTERNAL_STORAGE
);
}else{
//writeFile();
//Toast.makeText(this, "有權限(test)" ,Toast.LENGTH_SHORT).show();
}
2、要加上詢問框回傳函式
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
switch(requestCode) {
case REQUEST_EXTERNAL_STORAGE:
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
//取得權限,進行檔案存取
//writeFile();
} else {
//使用者拒絕權限,停用檔案存取功能
}
return;
}
}
3、在AndroidManifest.xml加上這二個項目
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
成功的結果如下:
至於原理是為何呢?可以參考以下的文章
https://litotom.com/2016/05/15/android-6-permission/
簡單地說是因為API 23開始細分為一般權限與危險權限,危險權限要用上述的程式段在執行中要求權限,所以程式要做些許改寫。
這邊整理資料將步驟簡化,附上問題圖片與解決圖片。
如果是位置存取資訊也會有上述問題,請看這篇。
留言列表