Question

Alright, so I have an app that has a custom folder:

I want to open the following types:

protected String[] acceptableTypes = {"jpg", "gif", "png", "bmp", "pdf", "txt"};

I can open the images or at least the jgps for sure with the following code whenever I click on the file:

MediaScannerConnection.scanFile(((Activity) getContext()), new String[] { filePath }, null, 
                new MediaScannerConnection.OnScanCompletedListener() { 
            @Override public void onScanCompleted(String path, Uri uri) { 
                Intent intent = new Intent(Intent.ACTION_VIEW); 
                intent.setDataAndType(uri, "image/*"); 
                ((Activity) getContext()).startActivityForResult(intent, ConferenceActivity.ACTIVITY_SELECT_IMAGE); 
            } 
        });

Now how can I filter this so that I can open the correct file type with the correct program?

Was it helpful?

Solution

Read http://developer.android.com/guide/components/intents-filters.html for an intro on how to do this. Search from "image/" on that page.

You need to declare the file types in your application's manifest file. Be sure and declare them using a mimeType like "image/*" or "image/png" so that you can open the files from other applications like gmail.

In your activity you would add something like this:

<intent-filter>
    <action android:name="android.intent.action.MAIN" />
    <category android:name="android.intent.category.LAUNCHER" />
    <data android:mimeType="image/*" />
</intent-filter>

The other catch is that you also have to handle both "file" schemes and "content" schemes. To see what I mean open a file from Gmail in Jellybean and you will see that the URI you are provided is a content type instead of the typical file type.

OTHER TIPS

you just have to pass the right mimeType in setDataAndType. You can get the mimeType of a file using URLConnection.guessContentTypeFromName

So something like this:

Intent i = new Intent();
i.setAction(android.content.Intent.ACTION_VIEW);
String mimeType = URLConnection.guessContentTypeFromName(filePath);
i.setDataAndType(Uri.fromFile(new File(filePath)), mimeType);
startActivity(i);
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top