我试图实现从存储中写入和读取的请求权限。一切正常,但今天 Android 向我展示了 onRequestPermissionsResult(...) 方法已被弃用。StackOverflow 中有很多关于这个主题的问题,但不幸的是,它们已经过时了。
我在一个片段中调用了下面的方法。
建议简单地调用:
requestPermissions(new String[] {Manifest.permission.WRITE_EXTERNAL_STORAGE},
StorageKeys.STORAGE_PERMISSION_CODE)
Run Code Online (Sandbox Code Playgroud)
而不是我的方法:
ActivityCompat.requestPermissions(getActivity(),
new String[] {Manifest.permission.WRITE_EXTERNAL_STORAGE},
StorageKeys.STORAGE_PERMISSION_CODE))
Run Code Online (Sandbox Code Playgroud)
但它们都表明 onRequestPermissionsResult(...) 已被弃用。
这是我的 onRequestPermissionsResult(...) 方法:
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,
@NonNull int[] grantResults) {
if (requestCode == StorageKeys.STORAGE_PERMISSION_CODE) {
if (grantResults.length > 0
&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {
exportBibTex.createBibFile();
exportBibTex.writeBibFile(exportBibTex
.getBibDataLibrary(libraryModel, bookDao, noteDao));
Toast.makeText(getContext(),
getString(R.string.exported_file_stored_in) + '\n'
+ File.separator + StorageKeys.DOWNLOAD_FOLDER + File.separator + fileName
+ StorageKeys.BIB_FILE_TYPE, Toast.LENGTH_LONG).show();
} else {
Toast.makeText(getContext(), R.string.storage_permission_denied,
Toast.LENGTH_SHORT).show();
}
}
}
Run Code Online (Sandbox Code Playgroud)
这是一个简单的警报对话框,我在其中调用 …
调用ActivityCompat.requestPermissions不会显示UI对话框.
ActivityCompat.requestPermissions(MainActivity.this, new String[]{"Manifest.permission.READ_SMS"}, REQUEST_CODE_ASK_PERMISSIONS);
Run Code Online (Sandbox Code Playgroud)
但是,如果我将minSDKversion更改为23并运行
requestPermissions(new String[]{"android.permission.READ_SMS"}, REQUEST_CODE_ASK_PERMISSIONS);
Run Code Online (Sandbox Code Playgroud)
出现对话框.为什么?BTW.要在模拟器上运行它,模拟器将以API 23为目标.
我正在尝试请求ACCESS_FINE_LOCATION权限以获取用户的当前位置.
我的日志记录表明我的应用程序在查询时当前没有此权限ContextCompat.checkSelfPermission(),但是在ActivityCompat.requestPermissions()显示任何内容时都显示.
我的谷歌地图代码(实施OnMapReadyCallback和ActivityCompat.OnRequestPermissionsResultCallback())是在FragmentActivity.
我已经设法让该requestPermissions()功能在应用程序中的其他活动中成功运行,它只是带有Google地图的那个.放置在onCreate()方法中Activity或在onMapReady()(需要去的地方)时它不起作用.
if(ContextCompat.checkSelfPermission(LocationActivity.this, android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
Log.d(TAG, "not granted");
final String[] permissions = new String[] {android.Manifest.permission.ACCESS_FINE_LOCATION};
if(ActivityCompat.shouldShowRequestPermissionRationale(this, android.Manifest.permission.ACCESS_FINE_LOCATION)) {
Log.d(TAG, "rationale");
// Explain to the user why permission is required, then request again
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage("We need permissions")
.setCancelable(false)
.setPositiveButton("OK", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
ActivityCompat.requestPermissions(LocationActivity.this, permissions, 1);
} …Run Code Online (Sandbox Code Playgroud) java android google-maps android-fragments android-permissions