java - 即使在android中获得了文件夹中的权限和文件后,也没有获得文件夹目录中的文件
问题描述
即使在 android.I 获得许可后,我也没有获得文件目录
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
在清单文件中。我加了
Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_DENIED
.
权限窗口弹出,并在应用程序中允许权限。我仍然得到 **dir 存在,但文件数为零 **。
这是我的完整代码。
public class MainActivity extends AppCompatActivity {
private Handler handler = new Handler();
ArrayList<Object> filesList = new ArrayList<>();
public static final int GALLERY_PERMISSION_CODE = 1002;
private File[] files;
@RequiresApi(api = Build.VERSION_CODES.M)
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.i("Omm","GalleryPermission before");
GalleryPermission();
Log.i("Omm","GalleryPermission after");
StringBuilder sb = new StringBuilder();
sb.append(Environment.getExternalStorageDirectory());
sb.append(File.separator);
sb.append("ABC/Media/.abc");
Log.i("Omm"," STATUS_DIR before");
File STATUS_DIR = new File(sb.toString());
Log.i("Omm"," STATUS_DIR after "+ sb.toString() );
Log.i("Omm", "dir exists = "+STATUS_DIR.exists());
/****CALLING FUNCTION************/
getData();
/****CALLING FUNCTION************/
}
@RequiresApi(api = Build.VERSION_CODES.M)
private void GalleryPermission() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (checkSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_DENIED
&& checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_DENIED) {
String[] galleryPermissions = {Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE};
requestPermissions(galleryPermissions, GALLERY_PERMISSION_CODE);
} else {
}
} else {
}
}
private ArrayList<Object> getData() {
StringBuilder sb = new StringBuilder();
sb.append(Environment.getExternalStorageDirectory());
sb.append(File.separator);
sb.append("Abc/Media/efg");//Consider this folder exits and
//contains data.
Log.i("Omm", "ArrayList inovked");
StoryModel f;
String targetPath = sb.toString();
File targetDirector = new File(targetPath);
files = targetDirector.listFiles();
/**************I AM GETTING FILESLENGTH AS ZERO*****BUT I HAVE FILE IN THAT DIRECTORY**************/
Log.i("Omm", "Files = "+files.length);
/**************I AM GETTING FILESLENGTH AS ZERO*****BUT I HAVE FILE IN THAT DIRECTORY**************/
if (files == null) {
Log.i("Omm", "Null");
}
try {
for (int i = 0; i < files.length; i++) {
File file = files[i];
f = new StoryModel();
f.setName("NBM Story Saver: " + (i + 1));
f.setUri(Uri.fromFile(file));
f.setPath(files[i].getAbsolutePath());
f.setFilename(file.getName());
filesList.add(f);
}
} catch (Exception e) {
e.printStackTrace();
}
/**************I AM GETTING FILESLIST AS ZERO*****BUT I HAVE FILE IN THAT DIRECTORY**************/
Log.i("Omm", "dir exists = "+filesList.size());
/**************I AM GETTING FILESLIST AS ZERO*****BUT I HAVE FILE IN THAT DIRECTORY**************/
return filesList;
}
}
解决方案
我刚刚 android:requestLegacyExternalStorage="true"
在<application>
标签的 AndroidMainfest.xml 中添加了。
它工作正常。
推荐阅读
- javascript - 如何在另一个公会中担任角色并在新公会 Discord.js v.12 中获得排名
- python - 获取挂起的更改列表
- mysql - TypeORM 抛出 QueryFailedError ER_TABLE_EXISTS_ERROR: MySQL 中已经存在表'courses'
- android - 堆分析插件和 Android Gradle 插件 4.2+
- react-native - 播放 Lottie 库的特定动画并跳过 React Native 中的其他部分
- math - 半对数刻度图上的直线通过两点的方程
- python - 变量作为后缀?
- php - 名称验证表单不允许名称之间有空格
- sql - 每个行组合的 SQL 总计
- react-native - 使手势状态逐步返回值(类似网格的行为)