在使用androidx的requestPermissionLauncher时,如果出现java.lang.IllegalArgumentException异常并提示“请求代码(requestCode)只能使用低16位”,则表示requestCode超过了16位。
解决方法如下:
private static final int MY_PERMISSIONS_REQUEST = 1;
private static final int MY_PERMISSIONS_REQUEST = 123456789;
private static final int REQUEST_MASK = 0xffff;
private ActivityResultLauncher requestPermissionLauncher =
registerForActivityResult(new ActivityResultContracts.RequestPermission(), result -> {
if (result) {
// 权限已授予
} else {
// 权限被拒绝
}
});
public void requestPermission() {
requestPermissionLauncher.launch(Manifest.permission.WRITE_EXTERNAL_STORAGE,
MY_PERMISSIONS_REQUEST & REQUEST_MASK);
}
通过将requestCode与REQUEST_MASK进行位运算,可以确保requestCode不超过16位。
请注意,如果你使用的是旧版的Support库(例如:android.support.v4.app.FragmentActivity),你需要将ActivityResultLauncher替换为ActivityCompat.OnRequestPermissionsResultCallback,并使用位运算符将requestCode限制为16位。
上一篇:AndroidX的迁移如何进行