Thanks for sharing Peter, that has really clarified a few things for me. On Sep 5, 4:16 am, Peter Eastman <[email protected]> wrote: > I've been pushing ahead on this project. I'd like to report my > progress for the benefit of anyone who comes across this thread. And > perhaps someone can tell me if there's a better solution than what I'm > doing. > > I'm trying to export data from my program in a way that users can > easily share: emailing it, posting it on a website, etc. And when > someone opens that file in their mail client, web browser, etc., I > want my program to automatically open to import it. This requires me > to identify the file as belonging to my program. With Android, there > are two ways you can try to specify file types: by MIME type and by > filename extension. Each of these only works in a minority of cases. > By using both of them, you can cover a slightly larger set of cases, > though still far from all cases. More on that later. > > The export side is quite easy. First, I create a temporary file with > the proper filename extension: > > File tempFile = File.createTempFile("Export", ".mytype"); > > I write the data to that temporary file, then export it as follows: > > startActivity(new Intent(Intent.ACTION_SEND).setType("application/ > vnd.mytype").putExtra(Intent.EXTRA_STREAM, > android.net.Uri.fromFile(tempFile))); > > This works beautifully. It immediately opens the Gmail app to send an > email and attaches my file to it. Presumably if I used a different > email client that would be opened, though I haven't tested this. > > Now for the import side. I use the following intent filter to > recognize files by MIME type: > > <intent-filter> > <action android:name="android.intent.action.VIEW" /> > <category android:name="android.intent.category.DEFAULT" /> > <category android:name="android.intent.category.BROWSABLE" /> > <data android:mimeType="application/vnd.mytype"/> > </intent-filter> > > When I open the email and press the Preview button next to the > attachment, it opens my app just as I wanted. > > This only works as long as you have the MIME type associated with the > file. If you post it on a website, that association gets lost. In > that case we need to use filename extension: > > <intent-filter> > <action android:name="android.intent.action.VIEW" /> > <category android:name="android.intent.category.DEFAULT" /> > <category android:name="android.intent.category.BROWSABLE" /> > <data android:scheme="http" /> > <data android:scheme="https" /> > <data android:scheme="ftp" /> > <data android:scheme="file" /> > <data android:scheme="content" /> > <data android:host="*" /> > <data android:pathPattern=".*\\.mytype" /> > </intent-filter> > > Now when I press the link in the Browser app, it brings up a list of > applications to open the file with, mine being one of the options. > That's not quite ideal, but it's good enough. > > Unfortunately, there are lots of other cases that don't work. Here's > a really basic one: > > Open the email on your computer and save the attached file to disk. > Now attach it to a new email. This causes the MIME type to be lost. > When you open that email in the Gmail app, the Preview button is no > longer there. It seems that when an attachment doesn't have a MIME > type specified, the Gmail app doesn't let you do *anything* with. Not > view it, not even save it to the sdcard, which is just ridiculous. > That really needs to be fixed. > > Of course, what Android really needs is a way to define custom > filename extension to MIME type mappings. Then this whole issue would > go away. But as far as I can tell, there's no way to do that. > > Here's another case that doesn't work: view the email in the Browser > using the Gmail web interface. The URL it provides to download the > attachment doesn't include the attachment name, nor is the MIME type > specified. Hence, you can't open it in my app. > > As a last resort, I plan to include an Import command in my app that > instructs the user to save the file to their sdcard in /downloads, > then load it from there. I'd feel better about that as a real > solution if the Gmail app would actually let you save files to the > sdcard. > > Peter
-- You received this message because you are subscribed to the Google Groups "Android Developers" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/android-developers?hl=en

