とあるアプリが、きっかけで、ようやく permission コードを実装する機会を得ました。
参考にしたのは、実行時のパーミッション リクエスト(Runtime Permission) 色々まとめ
たくさん権限が必要な場合、煩わしいので、こんなコードにしました。
import android.Manifest; import android.content.pm.PackageManager; // 古い場合 //import android.support.v4.app.ActivityCompat; //import android.support.v4.content.ContextCompat; //import android.support.v7.app.AppCompatActivity; // 新しい場合 import androidx.core.app.ActivityCompat; import androidx.core.content.ContextCompat; import androidx.appcompat.app.AppCompatActivity; // import android.content.Intent; import android.os.Bundle; import android.view.View; import android.widget.LinearLayout; import android.widget.TextView; import android.widget.Toast; import java.util.ArrayList; public class FooActivity extends AppCompatActivity { public static final int REQUEST_CODE = 1001; private static final String [] needPermissions = new String[] { Manifest.permission.READ_PHONE_STATE, Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.CAMERA, Manifest.permission.INTERNET }; /*! @brief 許可の得られていない権限を取得する */ ArrayListgetNeededPermissions() { ArrayList<String> result = new ArrayList<String>(); for( String s: needPermissions ) { if (ContextCompat.checkSelfPermission(this, s) != PackageManager.PERMISSION_GRANTED) { result.add(s); } } return result; } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_foo); ArrayList<String> permissions = getNeededPermissions(); if( permissions.size() > 0) { // パーミッションの許可をリクエスト ActivityCompat.requestPermissions(this, permissions.toArray(new String[permissions.size()]), REQUEST_CODE); } else { // 許可が必要なコード processAny(); } } // requestPermissionsのコールバック @Override public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) { switch (requestCode) { case REQUEST_CODE: ArrayList<String> needed = getNeededPermissions(); if( needed.size() > 0 ) { // 必要な権限の許可が足りない Toast.makeText(this, "本アプリを実行するための権限の許可が取れませんでした", Toast.LENGTH_LONG).show(); finish(); } else { // 必要な権限の許可がされた processAny(); } break; default: break; } } private void processAny() { // ... } // ... }
0 件のコメント:
コメントを投稿