Java 多重权限
我有一个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
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)”更改为棉花糖。有关其余代码,请参阅:,但如果您仔细查看该方法,我也会在请求之前检查权限。唯一的区别是,我要求的是一个接一个,而不是数组。