相关疑难解决方法(0)

ActivityCompat.requestPermissions未显示对话框

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)

java permissions android

60
推荐指数
6
解决办法
8万
查看次数

Android 11 Scoped 存储权限

我试图更好地了解 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

44
推荐指数
6
解决办法
5万
查看次数

android mkdirs无法正常工作

我需要在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()相同的结果.

知道代码中出了什么问题吗? …

android mkdirs

16
推荐指数
4
解决办法
1万
查看次数

在 Android API 29 中访问外部存储

我正在尝试实现一些清理工具。由于某些“安全原因”,越来越多的制造商禁止生根设备,禁止不要求解锁。

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

16
推荐指数
1
解决办法
2万
查看次数

无法使用 mkdirs() 创建目录 - android

我尝试创建一个目录并使用以下代码:

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 file mkdir mkdirs

2
推荐指数
1
解决办法
6633
查看次数

Android Q:file.mkdirs()返回false

我们有一个使用外部存储来存储一些临时文件的应用程序:图像,二进制数据。直到最近,用于该代码的代码已经运行了几年,没有太大的变化。在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 android-9.0-pie

2
推荐指数
2
解决办法
869
查看次数

无法在Android 10中创建目录

我无法在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)

java android

2
推荐指数
5
解决办法
268
查看次数