Java 一旦用户在权限屏幕上单击“允许”,则启动触觉

Java 一旦用户在权限屏幕上单击“允许”,则启动触觉,java,android,android-permissions,Java,Android,Android Permissions,我的一个活动需要位置许可,我写了下面的代码来获得许可。但在这种情况下,若应用程序最初并没有位置权限,用户需要单击两次以打开活动。我可以做一些更改,这样一旦用户在权限屏幕上单击“允许”,只有意图才会触发 int PERMISSION_ALL = 1; String[] PERMISSIONS = new String[0]; if (Build.VERSION.SDK_INT >

我的一个活动需要位置许可,我写了下面的代码来获得许可。但在这种情况下,若应用程序最初并没有位置权限,用户需要单击两次以打开活动。我可以做一些更改,这样一旦用户在权限屏幕上单击“允许”,只有意图才会触发

 int PERMISSION_ALL = 1;
                            String[] PERMISSIONS = new String[0];
                            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
                                PERMISSIONS = new String[]{
                                        Manifest.permission.ACCESS_FINE_LOCATION};
                            }

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

                            if (hasPermissions(getApplicationContext(), PERMISSIONS)) {
                                new Thread(new Runnable() {
                                    @Override
                                    public void run() {
                                        Intent intent = new Intent(StartActivity.this, Details.class);
                                        startActivity(intent);
                                    }
                                }).start();
                            }

覆盖
请求许可结果
如果许可被授予,则从那里开始您的
活动

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    if(requestCode == PERMISSION_ALL){
        if(grantResults.length>0 && grantResults[0]==PackageManager.PERMISSION_GRANTED ){

             new Thread(new Runnable() {
                    @Override
                    public void run() {
                        Intent intent = new Intent(StartActivity.this, Details.class);
                        startActivity(intent);
                    }
                }).start();
        }else{
            Toast.makeText(MainActivity.this, "Access Denied ! Cannot proceed further ", Toast.LENGTH_SHORT).show();
        }
    }
}
注意:显然,代码类似于
startupbactivity
(来自
startupbactivity.this
),因此您不需要创建线程,只需使用简单的
意图启动
详细信息
活动


代码将是

class StartupActivity extends ..{

    onCreate...(){}

    // here you will have onRequestPermissionsResult 
    @Override
    public void onRequestPermissionsResult( ....){...}

}
@覆盖
onRequestPermissionsResult(int-requestCode,字符串[]权限,int[]grantResults) {

//在此处处理您的权限授予/拒绝方案,
对于(int x=0;x
}


这将由android内部调用,一旦用户授予/拒绝权限

是,您需要覆盖
onRequestPermissionsResult

首先在
onCreate

int PERMISSION_ALL = 1;
String[] PERMISSIONS = new String[0];
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
    PERMISSIONS = new String[]{
            Manifest.permission.ACCESS_FINE_LOCATION};
}

if (!hasPermissions(getApplicationContext(), PERMISSIONS)) {
    ActivityCompat.requestPermissions(StartupActivity.this, PERMISSIONS, PERMISSION_ALL);
}
然后覆盖

  @Override
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
        if (requestCode == PERMISSION_ALL) {
                Intent intent = new Intent(StartActivity.this,Details.class);
                startActivity(intent);
        }
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    }

当应用程序请求权限时,系统会向用户显示一个对话框。当用户响应时,系统调用应用程序的onRequestPermissionsResult()方法,并将用户响应传递给它。你的应用程序必须覆盖该方法,以确定是否授予了该权限。回调传递的请求代码与传递给requestPermissions()的请求代码相同。例如,如果应用程序请求READ_CONTACTS access,它可能具有以下回调方法:

@Override
    public void onRequestPermissionsResult(int requestCode,
            String permissions[], int[] grantResults) {
        switch (requestCode) {
            case MY_PERMISSIONS_REQUEST_READ_CONTACTS: {
                // If request is cancelled, the result arrays are empty.
                if (grantResults.length > 0
                    && grantResults[0] == PackageManager.PERMISSION_GRANTED) {

                    // permission was granted, yay! Do the
                    // contacts-related task you need to do.

                } else {

                    // permission denied, boo! Disable the
                    // functionality that depends on this permission.
                }
                return;
            }

            // other 'case' lines to check for other
            // permissions this app might request
        }
    }

我给出的代码是在第(1)种情况下的switch语句中编写的:@override onRequest method@Panache查看更新以获得放置
onrequestpermissions结果的视觉提示我还需要您的输入,因为我有许多不同的意图,希望使用不同的权限激发。所以我应该按照你的建议使用这个用例。
@Override
    public void onRequestPermissionsResult(int requestCode,
            String permissions[], int[] grantResults) {
        switch (requestCode) {
            case MY_PERMISSIONS_REQUEST_READ_CONTACTS: {
                // If request is cancelled, the result arrays are empty.
                if (grantResults.length > 0
                    && grantResults[0] == PackageManager.PERMISSION_GRANTED) {

                    // permission was granted, yay! Do the
                    // contacts-related task you need to do.

                } else {

                    // permission denied, boo! Disable the
                    // functionality that depends on this permission.
                }
                return;
            }

            // other 'case' lines to check for other
            // permissions this app might request
        }
    }