if (ContextCompat.checkSelfPermission(RegisterActivity.this, Manifest.permission.READ_PHONE_STATE) == PackageManager.PERMISSION_DENIED){
ActivityCompat.requestPermissions(this,
new String[]{Manifest.permission.READ_PHONE_STATE}, REQUEST_READ_PHONE_STATE_PERMISSION);
Run Code Online (Sandbox Code Playgroud)
我正试图在nexus 5 api 23上使用这个功能,它只是没有向我显示它应该做的对话框,它只是没有做任何事情.什么可能导致问题?(此代码在java活动中)我尝试将最小api更改为23并使用requestPermissions()而不使用ActivityCompat但仍无效.
apply plugin: 'com.android.application'
android {
compileSdkVersion 23
buildToolsVersion "23.0.2"
defaultConfig {
applicationId "com.example.idanayzen.photomap"
minSdkVersion 23
targetSdkVersion 23
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:23.1.1'
compile 'com.google.android.gms:play-services:8.4.0'
compile 'com.android.support:design:23.1.1'
}
Run Code Online (Sandbox Code Playgroud)
和清单:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.idanayzen.photomap">
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.READ_SMS" />
<application …Run Code Online (Sandbox Code Playgroud) 我试图更好地了解 Android 11 版本发布后我将能够做什么。
我的应用程序使用提供的图像的文件路径Environment.getExternalStorageDirectory()来创建照片相册,但使用Android 11 我将无法直接访问 files。
根据Android开发人员文档,他们最近引入了该MANAGE_EXTERNAL_STORAGE权限,但我不明白添加此权限是否可以继续访问文件Environment。
有没有人有想法???
谢谢
2021 年 1 月更新
我在 Android 11 虚拟设备上尝试了我的应用程序,即使没有请求MANAGE_EXTERNAL_STORAGE许可,它似乎也能完美运行!
阅读 Android Developers 上的文档,似乎使用FILEAPI 仅访问照片和媒体位置的应用程序可以继续工作,但我不确定。
有没有人更了解Android文档???
android file android-developer-api android-storage android-11
我需要在Android上保存相机中的图像.我在清单中使用了写入外部存储权限,我正在使用此代码
File dir = new File(Environment.getExternalStorageDirectory(), "Test");
if (!dir.exists() || !dir.isDirectory())
dir.mkdirs();
String path = dir.getAbsolutePath();
Log.d(TAG, path); //log show the path
File file = new File(dir.getAbsolutePath() + "/Pic.jpg");
Log.d(TAG, file.getAbsolutePath()); //again path is shown here
outStream = new FileOutputStream(file);
outStream.write(bytes);
outStream.close();
Log.d(TAG, "onPictureTaken - wrote bytes: " + bytes.length); //fail here
} catch (FileNotFoundException e) {
Log.d(TAG, "not done"); //error is here (this exception is thrown)
} catch (IOException e) {
Log.d(TAG, "not");
} finally { }
Run Code Online (Sandbox Code Playgroud)
我也试过mkdir()而不是mkdirs()相同的结果.
知道代码中出了什么问题吗? …
我正在尝试实现一些清理工具。由于某些“安全原因”,越来越多的制造商禁止生根设备,禁止不要求解锁。
API 28 之后,此代码将出错:
ActivityCompat.requestPermissions(this, new String[]{
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.WRITE_EXTERNAL_STORAGE
}, 1); // Request permission or not, Will got same result
File rootFolder = Environment.getExternalStorageDirectory(); // That is working fine
rootFolder.listFiles(); // That will return null
Run Code Online (Sandbox Code Playgroud)
当然,我可以使用这个:
android:requestLegacyExternalStorage="true"
Run Code Online (Sandbox Code Playgroud)
但我相信将来会被杀死。
那么,有什么优雅的方式来管理 SDCard 吗?
android android-permissions android-external-storage android-10.0
我尝试创建一个目录并使用以下代码:
boolean success = true;
String rootDirectory = Environment.getExternalStorageDirectory().toString();
folder = new File(rootDirectory, "Directory");
if(!(folder.exists())) {
success = folder.mkdirs();
} else {
}
if(success) {
Toast.makeText(getActivity().getApplicationContext(), "DIR created", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(getActivity().getApplicationContext(), "DIR not created successfully", Toast.LENGTH_SHORT).show();
}
Run Code Online (Sandbox Code Playgroud)
我还搜索了创建的文件夹,但没有。
授予权限:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
Run Code Online (Sandbox Code Playgroud)
我还尝试在运行时请求许可,似乎该应用程序已获得许可,因此不可能是问题。
几个月前,我创建了另一个应用程序并使用了相同的代码和相同的 Sdk 版本,但它仍然不适用于这个应用程序。我收到“未成功创建 DIR”,但不知道为什么,请帮我找出无法创建目录的原因。
我们有一个使用外部存储来存储一些临时文件的应用程序:图像,二进制数据。直到最近,用于该代码的代码已经运行了几年,没有太大的变化。在Android Q上不起作用:
File f = new File(Environment.getExternalStorageDirectory().toString() + File.separator + MainActivity.APP_DIR)
f.mkdirs();
// do sth with f
Run Code Online (Sandbox Code Playgroud)
在mkdirs现在只返回false。
清单中提供了所需的权限:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
Run Code Online (Sandbox Code Playgroud)
该代码可在Android的早期版本上正常运行。这种访问类型在系统级别上有变化吗?如果是这样,解决方法是什么?
我无法在android 10中创建目录。直到android Oreo,它都可以在设备上使用。
我尝试了两种创建文件夹的方法。
使用 File.mkdir():
File f = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/Pastebin");
if (!f.isFile()) {
if (!(f.isDirectory())) {
success = f.mkdir();
}
Run Code Online (Sandbox Code Playgroud)
在此,变量success 始终为false,这表示未创建目录。
使用 Files.createDirectory():
File f = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/Pastebin");
if (!f.isFile()) {
if (!(f.isDirectory())) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
try {
Files.createDirectory(Paths.get(f.getAbsolutePath()));
} catch (IOException e) {
e.printStackTrace();
Toast.makeText(getApplicationContext(), R.string.unable_to_download, Toast.LENGTH_LONG).show();
}
} else {
f.mkdir();
}
}
Run Code Online (Sandbox Code Playgroud)
导致此异常:
pzy64.pastebinpro W/System.err: java.nio.file.AccessDeniedException: /storage/emulated/0/Pastebin
pzy64.pastebinpro W/System.err: at sun.nio.fs.UnixFileSystemProvider.createDirectory(UnixFileSystemProvider.java:391)
pzy64.pastebinpro W/System.err: …Run Code Online (Sandbox Code Playgroud)