Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/218.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 多重权限_Java_Android_Permissions - Fatal编程技术网

Java 多重权限

Java 多重权限,java,android,permissions,Java,Android,Permissions,我有一个java类,代码如下 public class PermisssionAction { public static void requestPermission(Activity activity, String permission) { if (ContextCompat.checkSelfPermission(activity, permission) != PackageManager.PERMISSION_GRANTED

我有一个java类,代码如下

public class PermisssionAction {

    public static void requestPermission(Activity activity, String permission) {
        if (ContextCompat.checkSelfPermission(activity, permission)
                != PackageManager.PERMISSION_GRANTED) {
            ActivityCompat.requestPermissions(activity, new String[]{permission}, 0);
        }
    }

}
public class MainActivity extends AppCompatActivity {
    protected void onCreate(Bundle bundle) {
        super.onCreate(bundle);

        PermisssionAction.requestPermission(this, Manifest.permission.READ_PHONE_STATE);
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
            PermisssionAction.requestPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE);
        }
        PermisssionAction.requestPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE);
        PermisssionAction.requestPermission(this, Manifest.permission.READ_CONTACTS);
        PermisssionAction.requestPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION);
        PermisssionAction.requestPermission(this, Manifest.permission.ACCESS_FINE_LOCATION);
        PermisssionAction.requestPermission(this, Manifest.permission.READ_SMS);
        PermisssionAction.requestPermission(this, Manifest.permission.INTERNET);
        PermisssionAction.requestPermission(this, Manifest.permission.BLUETOOTH);
        PermisssionAction.requestPermission(this, Manifest.permission.ACCESS_WIFI_STATE);
        PermisssionAction.requestPermission(this, Manifest.permission.SEND_SMS);



        Intent startupintent = new Intent(MainActivity.this, StartupActivity.class);
        startActivity(startupintent);
        finish();


    }
}
现在,我在mainactivity中调用了它的方法来获取应用程序的权限,如下所示

public class PermisssionAction {

    public static void requestPermission(Activity activity, String permission) {
        if (ContextCompat.checkSelfPermission(activity, permission)
                != PackageManager.PERMISSION_GRANTED) {
            ActivityCompat.requestPermissions(activity, new String[]{permission}, 0);
        }
    }

}
public class MainActivity extends AppCompatActivity {
    protected void onCreate(Bundle bundle) {
        super.onCreate(bundle);

        PermisssionAction.requestPermission(this, Manifest.permission.READ_PHONE_STATE);
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
            PermisssionAction.requestPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE);
        }
        PermisssionAction.requestPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE);
        PermisssionAction.requestPermission(this, Manifest.permission.READ_CONTACTS);
        PermisssionAction.requestPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION);
        PermisssionAction.requestPermission(this, Manifest.permission.ACCESS_FINE_LOCATION);
        PermisssionAction.requestPermission(this, Manifest.permission.READ_SMS);
        PermisssionAction.requestPermission(this, Manifest.permission.INTERNET);
        PermisssionAction.requestPermission(this, Manifest.permission.BLUETOOTH);
        PermisssionAction.requestPermission(this, Manifest.permission.ACCESS_WIFI_STATE);
        PermisssionAction.requestPermission(this, Manifest.permission.SEND_SMS);



        Intent startupintent = new Intent(MainActivity.this, StartupActivity.class);
        startActivity(startupintent);
        finish();


    }
}
现在我不明白为什么它在真正的移动设备上运行应用程序时只要求一个权限,而在emulator上一次就要求所有权限。
还假设应用程序第一次获得了位置权限,当你再次打开应用程序时,它会在真实设备上请求另一个待决权限,以此类推。您可以指导。

首先,仅对
危险的
权限使用
requestPermissions()
<例如,代码>互联网
没有
危险
保护级别

第二,调用
requestPermissions()
一次,使用all
字符串[]
,调用您正在请求的权限。目前,您多次调用
requestPermissions()
,每个请求有一个权限

  • 有一个权限组。它将在用户界面中请求权限。参考:
  • 一些gradle版本在Android手机中自动允许所有权限。(带有6.0+设备的旧Gradle版本)
  • 用户易于获得权限,以便更好地理解和使用。否则,在本机代码中,您需要检查是否已检查所有权限。并在接受许可时提供回调。搜索android的Easypermission。它可以在git中获得

  • 顺便说一下,在现有代码中将“(Build.VERSION.SDK\u INT>=Build.VERSION\u CODES.JELLY\u BEAN)”更改为棉花糖。有关其余代码,请参阅:

    ,但如果您仔细查看该方法,我也会在请求之前检查权限。唯一的区别是,我要求的是一个接一个,而不是数组。