Android piles of RuntimePermissions requests, code improving
for example:
AndroidManifest.xml:
java:
import android.Manifest; import android.content.pm.PackageManager; import android.os.Build; import android.os.Bundle; import android.support.v4.app.ActivityCompat; import android.support.v4.content.ContextCompat; import android.support.v7.app.AppCompatActivity; import android.util.Log; public class MainActivity extends AppCompatActivity { private final String TAG = "權限"; //請求碼。 private final int REQUEST_CODE = 0xa01; //批量權限組。 private String[] permissions = {Manifest.permission.CAMERA, Manifest.permission.WRITE_EXTERNAL_STORAGE}; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { for (int i = 0; i < permissions.length; i++) { if (ContextCompat.checkSelfPermission(this, permissions[i]) != PackageManager.PERMISSION_GRANTED) { Log.d(TAG, permissions[i] + "未獲得授權,請求權限..."); ActivityCompat.requestPermissions(this, permissions, REQUEST_CODE); } else { Log.d(TAG, permissions[i] + "已獲得授權,無需重復請求權限。"); } } } else { Log.d(TAG, "Android版本低於23,無需運行時請求權限。"); } } @Override public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) { switch (requestCode) { case REQUEST_CODE: if (grantResults != null && permissions != null) { for (int i = 0; i < grantResults.length; i++) { /** * PackageManager.PERMISSION_GRANTED:該值為常量值0,表示權限已經授予。 */ if (grantResults[i] == PackageManager.PERMISSION_GRANTED) { Log.d(TAG, permissions[i] + " 獲得授權。"); //在這裡開始啟動獲得授權後的業務邏輯代碼。 } /** * PackageManager.PERMISSION_DENIED:該值為常量值-1,表示權限未被授予。 */ if (grantResults[i] == PackageManager.PERMISSION_DENIED) { Log.d(TAG, permissions[i] + " 未獲得授權。"); //在這裡開始啟動未獲得授權後的業務邏輯代碼。 } } } break; } } }