最近做了個Demo,需要去相冊獲取一張圖片.
這個時候就需要動態權限了,但是就是不回調,就是不回調,就是不回調!
由於是在Fragment中來寫的這一段代碼,所以導致了Fragment獲取動態權限與Activity不同!
不說了,上代碼:
Fragment中的動態權限:
if(ContextCompat.checkSelfPermission(context, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED){ Log.i("===============", "打開儲存權限"); requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1); }else{ openAlbum(); }
Activity中的動態權限:
if(ContextCompat.checkSelfPermission(context, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED){ Log.i("===============", "打開儲存權限"); ActivityCompat.requestPermissions((Activity) context, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1); }else{ openAlbum(); }
看到沒 就是不一樣
主要的區別是Fragment中不能使用ActivityCompat這個方法調用動態權限!
否則不能回調:
@Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { switch (requestCode){ case 1: if(grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED){ openAlbum(); }else{ Toast.makeText(context, "請打開相應權限", Toast.LENGTH_SHORT).show(); } break; } }
終於解決掉了這個坑!