Saving public files in the internal storage

荒凉一梦 提交于 2019-12-03 23:35:15

On some devices, the internal memory is represented by /emmc/.

/emmc/ may exist on some devices, and it may be internal, but it may not be accessible to applications, and it certainly is not part of the Android SDK unless that happens to be what getExternalStorageDirectory() returns.

But is it really representative of the internal memory?

No.

Or is it the third memory?

Ask your device manufacturer.

Should I save the files using openFileOutput() with MODE_WORLD_READABLE ?

That is impossible to answer in the abstract. You say that your files "should be accessible to other applications as well", but you have not indicated why you expect any other application to care one bit about your files. Other applications will not be scanning your directories for files -- at best, they will allow users to browse external storage. The only reason to have a file that is MODE_WORLD_READABLE is if your application will be triggering another application to do something with the file (e.g., ACTION_VIEW Intent).

I realize this is old and has an accepted answer, but I think the question is still relevant and that there is a way to achieve what the asker wants.

To paraphrase, I believe the asker wants to save a file, and make it accessible (e.g. for viewing) by other apps, without having to think about external storage (e.g. an additional permission and the possibility that the external storage is not present).

It turns out that you can make your own files readable by other apps.

File file = new File( ctx.getCacheDir(), "picture" );               
...
file.setReadable( true, false );
  // makes file readable to other apps

// Get another app to view my picture
Uri uri = Uri.fromFile(file);          
Intent intent = new Intent( Intent.ACTION_VIEW );
intent.setDataAndType( uri, "image/*" );
ctx.startActivity( intent );

The setReadable made the above code work for me - without that line the viewer app couldn't read the file. Note that setReadable operates on the whole directory, so the best solution is probably to create a sub-directory name 'public' and put your files in there.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!