Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何使用我的应用程序从其他应用程序(在其私有缓存目录中)读取文件_Android_File - Fatal编程技术网

Android 如何使用我的应用程序从其他应用程序(在其私有缓存目录中)读取文件

Android 如何使用我的应用程序从其他应用程序(在其私有缓存目录中)读取文件,android,file,Android,File,我有一个应用程序(商业应用程序),它在缓存目录中创建一个数据文件(csv格式)。我需要在我的应用程序中读取此数据文件以分析数据 但是,当我尝试使用inputStream方法读取具有绝对路径访问权限的文件时,我发现一个exeption权限被拒绝 所以我想我必须改变或要求许可,但我并不完全理解。我是android开发的初学者,我读了一些关于内容提供商、外部存储的文章,但没有解决我的问题。你能帮我吗 我的代码: List<String> RowDataFile = new ArrayLis

我有一个应用程序(商业应用程序),它在缓存目录中创建一个数据文件(csv格式)。我需要在我的应用程序中读取此数据文件以分析数据

但是,当我尝试使用inputStream方法读取具有绝对路径访问权限的文件时,我发现一个exeption权限被拒绝

所以我想我必须改变或要求许可,但我并不完全理解。我是android开发的初学者,我读了一些关于内容提供商、外部存储的文章,但没有解决我的问题。你能帮我吗

我的代码:

List<String> RowDataFile = new ArrayList<String>();

    FileInputStream input = null;
    String filePath = "storage/emulated/0/Android/data/com.lifescan.reveal/cache";
    //String filePath = "storage/emulated/0/Android/data/vincent.gridlayout/files";
    File f = new File(filePath,"/data.csv");

    try {
        FileReader fr = new FileReader(f);
        BufferedReader br = new BufferedReader(fr);

        for (String line = br.readLine(); line != null; line = br.readLine()) {
            RowDataFile.add(line);
        }
    } catch (IOException e) {e.printStackTrace();}
List RowDataFile=new ArrayList();
FileInputStream输入=null;
String filePath=“storage/emulated/0/Android/data/com.lifescan.reveal/cache”;
//String filePath=“存储/仿真/0/Android/data/vincent.gridlayout/files”;
文件f=新文件(filePath,“/data.csv”);
试一试{
FileReader fr=新的FileReader(f);
BufferedReader br=新的BufferedReader(fr);
对于(字符串line=br.readLine();line!=null;line=br.readLine()){
RowDataFile.add(行);
}
}catch(IOE异常){e.printStackTrace();}
在logcat中生成的异常:

08-12:37:21.254 30563-30563/vincent.gridlayout W/System.err:java.io.FileNotFoundException:/storage/simulated/0/Android/data/com.lifescan.reveal/cache/data.csv:open失败:EACCES(权限被拒绝)

安卓设备系统:4.4.2

以及舱单:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="vincent.heatMap">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name=".HeatMapEdit"></activity>
    </application>
</manifest>


感谢您的帮助…

根据您的logcat输出,这看起来不像是一个简单的清单权限问题。看起来您正试图从另一个应用程序的访问文件,该应用程序是该应用程序的专用文件

为了让另一个应用程序共享来自内部存储器的文件,它必须在其清单中指定一个
FileProvider
。查看上的文档,以便在一个应用程序中设置
文件提供程序
,并从另一个应用程序请求共享文件

注意:以前,如果文件是使用 上下文模式
MODE\u WORLD\u READABLE
MODE\u WORLD\u WRITEABLE
。不过,, 自API级别17以来,这两个常量都已被弃用,并且 从API级别24开始,它们的使用将导致
SecurityException
被扔了


你能发布代码和完整的日志/异常详细信息吗?还有,这种情况发生在哪个安卓版本?看起来您确实缺少权限,但完整日志会有所帮助。顺便问一下,清单文件是否请求读取/写入外部存储的权限?(外部存储权限的确切行为因Android版本的不同而有所不同,这就是为什么我会询问发生这种情况的版本)。我发现了错误…我在清单中错放了标记!!它一定在标签前面…但我不明白为什么!谢谢你的回答,文森特。