Andy Davies
Andy Davies

Reputation: 4287

Android Shared Internal Storage

Is there such thing on any Android based device as shared internal storage? I know you can use the SDCard as a shared file location between applications, but for a project I'm working on we dont want the ability for a SD Card to go missing (sensitive material).

The problem is as follows. App1 allows a user to browse (for example) some word documents and download them to the proposed shared storage, the user can then pass this file to Documents 2 Go editing them and saving the change. App 1 then allows an upload of the changed file.

I don't fancy building a document editor word/excel directly into app, unless thats easy?

EDIT:

The second app is "Documents 2 Go" I won't be able to edit its AndroidManifest

Upvotes: 5

Views: 12632

Answers (3)

kiranpradeep
kiranpradeep

Reputation: 11221

I faced a similar situation now for txt files and did this.

File downloadedFile= new File( context.getFilesDir(), "simple.txt" );
downloadedFile.setReadable( true, false );
downloadedFile.setWritable( true, false ); //set read/write for others
Uri downloadFileUri = Uri.fromFile( downloadedFile );
Intent intentToEditFile = new Intent( Intent.ACTION_EDIT );
intentToEditFile.setDataAndType( downloadFileUri, "text/plain" );
context.startActivity( intentToEditFile );

Now the 'Document 2 Go' editor will be launched to edit the file and will be able to edit simple.txt

Note 1: Uri should be created from same file object that was set with setReadable()/setWritable.
Note 2: Read/Write permission for other users might not be reflected in file system. Some times I cannot see rw-rw-rw- in adb shell

Upvotes: 1

Dheeresh Singh
Dheeresh Singh

Reputation: 15701

https://stackoverflow.com/a/6708681/804447

Sharing data between apps is what ContentProviders are for. Assuming that you know how to write a ContentProvider and access it, you can access files via ParcelFileDescriptor, which includes constants for the mode in which you create the files.

What you need now is to limit access so that not everybody can read the files through the content provider, and you do that via android permissions. In the manifest of one your apps, the one that will host the files and the content provider, write something like this:

<permission android:name="com.example.android.provider.ACCESS" android:protectionLevel="signature"/>

and in both apps add this:

<uses-permission android:name="com.example.android.provider.ACCESS" /> 

by using protectionLevel="signature", only apps signed by you can access your content provider, and thus your files.

Upvotes: 0

AggelosK
AggelosK

Reputation: 4351

I believe ContentProviders is your solution. Its the Android recommended method for sharing application data between different apps.

Upvotes: 0

Related Questions