私のテスト用デバイスには Android N Developer プレビュー バージョンがあり、アプリの起動時にランタイム許可を求めています。
残念ながら、アプリは権限を付与するための警告ダイアログを表示しません。以下のコードを使用しています。
ランチャー アクティビティ
public class LoginActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
if(checkPermissions()) {
renderView();
}
}
private boolean checkPermissions() {
int permissionWriteStorage = ContextCompat.checkSelfPermission(this, Manifest.permission_group.STORAGE);
int permissionPhoneState = ContextCompat.checkSelfPermission(this, Manifest.permission.READ_PHONE_STATE);
Log.i("permission",(permissionWriteStorage == PackageManager.PERMISSION_GRANTED) + "");
//This prints false
List<String> listPermissionsNeeded = new ArrayList<>();
if (permissionWriteStorage != PackageManager.PERMISSION_GRANTED) {
listPermissionsNeeded.add(Manifest.permission_group.STORAGE);
}
if (permissionPhoneState != PackageManager.PERMISSION_GRANTED) {
listPermissionsNeeded.add(Manifest.permission.READ_PHONE_STATE);
}
if (!listPermissionsNeeded.isEmpty()) {
Log.i("permission", "in if");
//I get this in the logs
ActivityCompat.requestPermissions(this, listPermissionsNeeded.toArray(new String[listPermissionsNeeded.size()]),REQUEST_ID_MULTIPLE_PERMISSIONS);
return false;
}
return true;
}
}
build.gradle
apply plugin: 'com.android.application'
apply plugin: 'com.google.gms.google-services'
android {
compileSdkVersion 24
buildToolsVersion "23.0.3"
defaultConfig {
applicationId 'com.***.***'
minSdkVersion 16
targetSdkVersion 24
}
}
編集:解決策(1/2)
ビルド ツールのバージョンを24.0.1
I am gets the alert for READ_PHONE_STATE
permission but not for the permission group に変更すると、 STORAGE
. パーミッション グループのパーミッションごとに個別に要求する必要がありますか?
編集 2: ソリューション (2/2)
に置き換えることで解決できましManifest.permission_group.STORAGE
たManifest.permission.WRITE_EXTERNAL_STORAGE
。ドキュメントによると、グループ全体に対する 1 つの危険なアクセス許可の確認が必要なだけです。
ユーザーは、権限グループごとに 1 回だけ権限を付与する必要があります。アプリがそのグループ (アプリ マニフェストにリストされているもの) の他のパーミッションを要求すると、システムはそれらを自動的に付与します。