Activity.requestPermissions
和ActivityCompat.requestPermissions
都是用来请求权限的方法,但是它们之间有一些区别。
参数不同:
Activity.requestPermissions
方法的参数是权限数组(String[])和请求码(int)。ActivityCompat.requestPermissions
方法的参数是Activity对象、权限数组(String[])、请求码(int)。功能不同:
Activity.requestPermissions
方法是Activity类的方法,用于请求权限,会直接将权限请求结果返回给调用它的Activity。ActivityCompat.requestPermissions
方法是ActivityCompat类的静态方法,用于请求权限,会将权限请求结果返回给调用它的Activity,但是它是一个兼容方法,可以在不同的Android版本上使用。代码示例:
// 使用Activity.requestPermissions方法请求权限
public class MainActivity extends Activity {
private static final int REQUEST_CODE = 1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 请求权限
String[] permissions = {Manifest.permission.CAMERA};
requestPermissions(permissions, REQUEST_CODE);
}
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
if (requestCode == REQUEST_CODE) {
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// 权限被授予
// 执行相应的操作
} else {
// 权限被拒绝
// 执行相应的操作
}
}
}
}
// 使用ActivityCompat.requestPermissions方法请求权限
public class MainActivity extends AppCompatActivity {
private static final int REQUEST_CODE = 1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 请求权限
String[] permissions = {Manifest.permission.CAMERA};
ActivityCompat.requestPermissions(this, permissions, REQUEST_CODE);
}
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
if (requestCode == REQUEST_CODE) {
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// 权限被授予
// 执行相应的操作
} else {
// 权限被拒绝
// 执行相应的操作
}
}
}
}
无论使用哪种方法,都需要在AndroidManifest.xml文件中添加相应的权限声明。
上一篇:Activity.onSaveInstanceState工具过大的问题,其原因是:androidx.lifecycle.BundlableSavedStateRegistry.key=795.1KB。