启动 Activity After Multiple Permission?android 6+

Start the Activity After Multiple Permission?android 6+

我已在我的初始屏幕上将其授予 Req Multiple 权限

public class Main_MulPer extends Activity {

public static final int R_PERM = 321;

Context context = this;

public static boolean hasPermissions(Context context, String... permissions) {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && context != null && permissions != null) {
        for (String permission : permissions) {
            if (ActivityCompat.checkSelfPermission(context, permission) != PackageManager.PERMISSION_GRANTED) {
                return false;
            }
        }
    }
    return true;
}

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.rcssa);


    int PERMISSION_ALL = 1;
    String[] PERMISSIONS = {Manifest.permission.CAMERA,
    Manifest.permission.READ_PHONE_STATE,
    Manifest.permission.INTERNET,
    Manifest.permission.ACCESS_NETWORK_STATE,
    Manifest.permission.ACCESS_WIFI_STATE,
    Manifest.permission.NFC,
    Manifest.permission.READ_EXTERNAL_STORAGE,
    Manifest.permission.WRITE_EXTERNAL_STORAGE,     
    };

    if (!hasPermissions(this, PERMISSIONS)) {
        ActivityCompat.requestPermissions(this, PERMISSIONS, PERMISSION_ALL);

        Main_MulPer.this.finish();
        Intent ss = new Intent(Main_MulPer.this, Main_acti.class);
        ss.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
        ss.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        ss.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
        ss.setFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
        startActivity(ss);

    } else {
        if (!hasPermissions(this, PERMISSIONS)) ;
        {
            ActivityCompat.requestPermissions(this, PERMISSIONS, PERMISSION_ALL);

            new Handler().postDelayed(new Runnable() {
                @Override
                public void run() {
                    Main_MulPer.this.finish();
                    Intent i = new Intent(Main_MulPer.this, Splash_two.class);
                    startActivity(i);
                }
            }, 3000);

        }
    }

}

}

所以我的问题是它一次请求两个权限...

如果我尝试允许他们转移到另一个 Activity... 所以我已经给出了类似的 3 个活动,每个活动有 2 个权限..

但是由于处理程序正在打开新活动.. 然后我删除了 Delay Handler... 现在它打开 Last activity... 直接...

任何人都可以建议我如何仅在获得所有权限后启动 Main Activity... 未经许可它应该退出应用程序...请帮助我

更新

Insted of Multiple permissions 我已经将 3 个活动拆分为每个活动有两个权限...但是在这里它应该在获得许可后转到下一个 activity 但是它会持续 activity 每次前两个activity 缺少权限 所以我需要退出应用程序并给他们...

我只需要未经允许不要跳到下一个画面

任何人都可以在允许后建议我只转到下一个 activity.....

当您请求许可时,您将在 onRequestPermissionsResult 中收到结果 按照 google 文档所说 here

处理来自内部的结果

已更新

你提到的权限是分组的例子

Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE

它只会为此请求一个权限,一个用于调用(读取 phone 状态)并且您不需要请求访问网络状态和互联网的权限

final int PERMISSION_REQUEST_CODE = 111;

if (Build.VERSION.SDK_INT >= 23) {
      if (!checkReadContactPermission() ||!checkReadPhoneStatePermission()
          || !checkWriteExternalStorage() || !checkReadExternalStorage() ||
          !checkSystemAlertWindowPermission() || !checkWriteContactPermission()) {
                   requestPermission();
            } else {
                  // Move to main act
          }
      } else {
                  // Move to main act
   }

你必须为每个检查权限制作方法

例如。这是用于读取联系人,以同样的方式添加所有其他

private boolean checkReadContactPermission() {
            int result = ContextCompat.checkSelfPermission(activity, Manifest.permission.READ_CONTACTS);
            if (result == PackageManager.PERMISSION_GRANTED) {
                return true;
            } else {
                return false;
            }
        }

请求权限的方法

private void requestPermission() {
            ActivityCompat.requestPermissions(this,
                    new String[]{Manifest.permission.READ_CONTACTS,
                            Manifest.permission.WRITE_CONTACTS,
                            Manifest.permission.READ_PHONE_STATE,
                           /* Manifest.permission.CAMERA,*/
                            Manifest.permission.WRITE_EXTERNAL_STORAGE,
                            Manifest.permission.READ_EXTERNAL_STORAGE},
                    PERMISSION_REQUEST_CODE);
        }

最后 RequestPermissionResult

   @Override
    public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
        switch (requestCode) {
            case PERMISSION_REQUEST_CODE:
                // if granted then 0 else -1
                // i have 5 permisson to check so 0,1,2,3,4..
                if (grantResults[0] == PackageManager.PERMISSION_GRANTED &&
                        grantResults[1] == PackageManager.PERMISSION_GRANTED &&
                        grantResults[2] == PackageManager.PERMISSION_GRANTED &&
                        grantResults[3] == PackageManager.PERMISSION_GRANTED &&
                        grantResults[4] == PackageManager.PERMISSION_GRANTED) {

                    // means all permission are granted..move to Main activity

                } else {
                   // show alert
                }
                break;
        }
    }

试试这个,

 public class Main_nPRC extends Activity {

public static final String MainPP_SP = "MainPP_data";
public static final int R_PERM = 2822;
private static final int REQUEST= 112;

Context mContext = this;


@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.rcssa);

    SharedPreferences settings = getSharedPreferences(MainPP_SP, 0);
    HashMap<String, String> map = (HashMap<String, String>) settings.getAll();

    if (Build.VERSION.SDK_INT >= 23) {
        Log.d("TAG","@@@ IN IF Build.VERSION.SDK_INT >= 23");
        String[] PERMISSIONS = {android.Manifest.permission.CAMERA,
                android.Manifest.permission.READ_PHONE_STATE,
                android.Manifest.permission.INTERNET,
                android.Manifest.permission.ACCESS_NETWORK_STATE,
                android.Manifest.permission.ACCESS_WIFI_STATE,
                android. Manifest.permission.NFC,
                android.Manifest.permission.READ_EXTERNAL_STORAGE,
                android.Manifest.permission.WRITE_EXTERNAL_STORAGE,
        };


        if (!hasPermissions(mContext, PERMISSIONS)) {
            Log.d("TAG","@@@ IN IF hasPermissions");
            ActivityCompat.requestPermissions((Activity) mContext, PERMISSIONS, REQUEST );
        } else {
            Log.d("TAG","@@@ IN ELSE hasPermissions");
            callNextActivity();
        }
    } else {
        Log.d("TAG","@@@ IN ELSE  Build.VERSION.SDK_INT >= 23");
        callNextActivity();
    }

}

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    switch (requestCode) {
        case REQUEST: {
            if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                Log.d("TAG","@@@ PERMISSIONS grant");
                callNextActivity();
            } else {
                Log.d("TAG","@@@ PERMISSIONS Denied");
                Toast.makeText(mContext, "PERMISSIONS Denied", Toast.LENGTH_LONG).show();
            }
        }
    }
}

private static boolean hasPermissions(Context context, String... permissions) {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && context != null && permissions != null) {
        for (String permission : permissions) {
            if (ActivityCompat.checkSelfPermission(context, permission) != PackageManager.PERMISSION_GRANTED) {
                return false;
            }
        }
    }
    return true;
}

public void callNextActivity()
{
    Intent ss = new Intent(Main_nPRC.this, NMainSS.class);
    ss.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
    ss.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    ss.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
    ss.setFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
    startActivity(ss);
    finish();
}



@Override
public void onBackPressed() {

    AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this);
    alertDialogBuilder.setTitle("ⓘ Exit ! " + getString(R.string.app_name));
    alertDialogBuilder
            .setMessage(Html.fromHtml("<p style='text-align:center;'>Please Fill the required details</p><h3 style='text-align:center;'>Click Yes to Exit !</h4>"))
            .setCancelable(false)
            .setPositiveButton("Yes",
                    new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int id) {
                            moveTaskToBack(true);
                            android.os.Process.killProcess(android.os.Process.myPid());
                            System.exit(0);

                        }
                    })

            .setNegativeButton("No", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int id) {

                    dialog.cancel();
                }
            });

    AlertDialog alertDialog = alertDialogBuilder.create();
    alertDialog.show();

}

}