是否可以将文件从一个应用程序复制到另一个应用程序的ExternalFilesDirectory?

时间:2019-06-05 06:29:42

标签: android

我有两个应用程序 TEST1 TEST2 。 我在 TEST1 一个应用中添加了一个按钮。用户按下此按钮时,应将文件复制到 TEST2 应用程序的目录中。 我尝试使用下面的代码实现这一点

TEST1.java

public class MainActivity extends AppCompatActivity {
Button button;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    button=findViewById(R.id.button);
    button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            try {
                copyAssets();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    });
}

private void copyAssets() throws IOException {
    AssetManager assetManager = getAssets();
        InputStream in = null;
        OutputStream out = null;
          String  filename="1.jpg";
            Log.d("pavan", "copyAssets: "+filename);
            in = assetManager.open(filename);
            Log.d("pavan", "copyAssets: "+getExternalFilesDir(null));
//I have given directory path of **TEST2** App.
            File outFile = new File("/storage/emulated/0/Android/data/com.example.TEST2/files", filename);
            out = new FileOutputStream(outFile);
            copyFile(in, out);

}
private void copyFile(InputStream in, OutputStream out) throws IOException {
    byte[] buffer = new byte[1024];
    int read;
    while((read = in.read(buffer)) != -1){
        out.write(buffer, 0, read);
    }
}

}

但是即使文件存在,我也遇到java.io.FileNotFoundException:异常。

例外:

2019-06-05 11:46:26.934 11888-11888/com.example.test W/System.err: java.io.FileNotFoundException: /storage/emulated/0/Android/data/com.example.TEST2/files/1.jpg (No such file or directory)

可能是因为Android不允许访问其他应用程序的目录。 有其他解决方案吗?

1 个答案:

答案 0 :(得分:0)

所有Android设备都有两个文件存储区:“内部”和“外部”存储。在内部存储上,只有未在其他应用程序或应用程序中使用的应用程序才能访问此处共享的文件。因此,如果您想通过外部存储共享并与同一文件上的(例如 TEST1 TEST2 )应用程序一起使用,我们可以访问它。

例如:

File outFile = new File("/storage/emulated/0/Android/data/com.example.TEST2/files", filename);

更改路径和使用的外部存储路径。