Android M onRequestPermissionsResult in non-Activity

前端 未结 6 873
无人及你
无人及你 2020-12-29 03:52

I have an application which needs to find the user location, and location is fetched in various classes, so i have written a separate class(Not an Activity

6条回答
  •  生来不讨喜
    2020-12-29 04:17

    1- create a transparent activity

    
    
    
    

    2- customize your activity

    public class CheckStoragePermissionsActivity extends AppCompatActivity {
    
        private String[] permissions;
        private int pCode = 12321;
        public static PermissionListener permissionListener;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
    
            checkPermissions();
        }
    
        private void checkPermissions() {
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
    
                permissions = new String[]{Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE};
    
                boolean flag = false;
                for (String s : permissions)
                    if (checkSelfPermission(s) != PackageManager.PERMISSION_GRANTED)
                        flag = true;
    
                if (flag) {
                    requestPermissions(permissions, pCode);
                } else {
                    permissionListener.permissionResult(true);
                    finish();
                }
            }else
                finish();
        }
    
        @Override
        public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
            if (requestCode == pCode) {
                boolean flag = true;
                if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M)
                    for (int i = 0, len = permissions.length; i < len; i++)
                        if (grantResults[i] != PackageManager.PERMISSION_GRANTED)
                            flag = false;
                if (flag) {
                    if (permissionListener != null)
                        permissionListener.permissionResult(true);
                } else if (permissionListener != null)
                    permissionListener.permissionResult(false);
                finish();
            }
        }
    }
    

    3- permissionListener is an static interface and can be set directly before context.startActivity(...), or use your plan to found permission result.

    public interface PermissionListener extends Serializable {
        void permissionResult(boolean hasPermission);
    }
    

    4- finally call context.startActivity(new Intent(context, CheckStoragePermissionsActivity.class));

    CheckStoragePermissionsActivity do all of needed and finish after user Allow or Deny action.

提交回复
热议问题