如何在对话框中单击允许权限时设置事件 安卓目标 >23



在我的飞溅活动中,我在启动应用程序时运行处理程序延迟,现在使用设备6.0(目标23)我添加了对话框询问许可。因此,我希望在单击"允许"对话框之后,我将启动处理程序,因为如果我同时启动检查程序,则将下一个活动,尽管我无法单击"允许"对话框。我该怎么做?这是我的代码:

 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main22);
        askPermissions();
    }
    private static String[] STR_ALL_PERMITTIONS = new String[]{
            Manifest.permission.READ_EXTERNAL_STORAGE,
            Manifest.permission.WRITE_EXTERNAL_STORAGE,
            Manifest.permission.SEND_SMS,
    };
    private static final int RCODE_PERMISSION_ALL = 1;
    private int iAskingCounter = 0;
    private boolean doesAppNeedPermissions() {
        return android.os.Build.VERSION.SDK_INT > Build.VERSION_CODES.LOLLIPOP_MR1;
    }
    private void askPermissions() {
        if (doesAppNeedPermissions()) {
            Toast.makeText(this, "hi", Toast.LENGTH_SHORT).show();
            iAskingCounter++;
            try {
                boolean isPermitted = isPermittedAllPermissions(this, STR_ALL_PERMITTIONS);
                if (!isPermitted) {
                    if (iAskingCounter >= 20) {
                        startNextIntent();
                    } else {
                        ActivityCompat.requestPermissions(this, STR_ALL_PERMITTIONS, RCODE_PERMISSION_ALL);
                    }
                    return;
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        } else {
            Toast.makeText(this, "helllo", Toast.LENGTH_SHORT).show();
        }
    }
    private void startNextIntent() {
        Intent in = new Intent(Main22Activity.this, Main2Activity.class);
        startActivity(in);
    }
    private boolean isPermittedAllPermissions(Context context, String... sArrPermissions) {
        if (context == null || sArrPermissions == null) return true;
        for (String permission : sArrPermissions) {
            boolean shouldShow = ActivityCompat.shouldShowRequestPermissionRationale(this, permission);
            if (shouldShow) {
                //ActivityCompat.finishAffinity(this);
            }
            if (ContextCompat.checkSelfPermission(context, permission) != PackageManager.PERMISSION_GRANTED) {
                return false;
            }
        }
        return true;
    }
    @Override
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        askPermissions();
    }
    public void playHandler(){ // where is I call it?
        Handler handler = new Handler();
        handler.postDelayed(new Runnable() {
            @Override
            public void run() {
                Intent in = new Intent(Main22Activity.this, Main2Activity.class);
                startActivity(in);
            }
        }, 1000);
    }

尝试以下操作:在onRequestPermissionsResult()中获取允许事件,例如:

    @Override
public void onRequestPermissionsResult(int requestCode,
                                       String permissions[], int[] grantResults) {
    switch (requestCode) {
        case RCODE_PERMISSION_ALL: {
            if (grantResults.length > 0
                    && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                Toast.makeText(getApplicationContext(), "Permission granted", Toast.LENGTH_SHORT).show();
                // call your method
                Start_Handler()
            } else {
                Toast.makeText(getApplicationContext(), "Permission denied", Toast.LENGTH_SHORT).show();
            }
            return;
        }
        // other 'case' lines to check for other
        // permissions this app might request
    }
 }

最新更新