android - 多次权限后启动 Activity ?android 6+

标签 android runtime-permissions

我已在我的初始屏幕上授予此请求多个权限

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 个 Activity ,每个 Activity 有 2 个权限..

但是由于 Handler 开启了新的 Activity .. 然后我删除了延迟处理程序...现在它打开最后一个 Activity ...直接...

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

更新

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

我需要的是未经允许不要移动到下一个屏幕

任何人都可以在获得许可后建议我只转到下一个 Activity ....

最佳答案

试试这个,

 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();

}

}

关于android - 多次权限后启动 Activity ?android 6+,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42686815/

相关文章:

android - 每个 fragment 的自定义选项菜单

Android Studio 2.0 即时运行不起作用但出现此提示?

android - 如何在 Volley 中获取 JSONObject 服务器响应

android - System.nanoTime() 在 Android 中给出了错误的时间

Android - 更改 READ_PHONE_STATE 权限请求消息

安卓Wifi流量

安卓 : Webcam Error in WebView (Camera Permission not working)

java - 从 Android 版本 Marshmallow 开始,如何请求允许从 Android 调用电话?

android - 在读取或写入 NFC 之前我应该​​征求许可吗?

android - 运行时权限: no permission immediately after granting