XxGoliathusxX
XxGoliathusxX

Reputation: 982

Android Filter Intent Chooser

I would like to filter the list you see below. Only file-explorer should be choosable.

intent = new Intent(Intent.ACTION_VIEW);
Uri uri = Uri.parse(Environment.getExternalStorageDirectory() + "/Android/data/" + getContext().getPackageName() + "/Files");
intent.setDataAndType(uri, "*/*");
startActivity(Intent.createChooser(intent, getString(R.string.openFolder)));

Example

EDIT:

Example

Upvotes: 0

Views: 1111

Answers (4)

CommonsWare
CommonsWare

Reputation: 1006614

This is not possible. There is no magic Intent that always only opens some magic app category.

First, anyone can write any app to respond to any desired implicit Intent.

Second, there is no universal definition of "file explorer". What you think a "file explorer" is may differ from what other developers think a "file explorer" is, which in turn may differ from what users think a "file explorer" is. A user's device may not even have a "file explorer", from anyone's definition.

Upvotes: 1

Farshad
Farshad

Reputation: 3140

Make sure that the directory exists then try this :

Intent fileManagers = new Intent();
fileManagers.setAction(Intent.ACTION_GET_CONTENT);
File dir = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES)
                .getAbsolutePath());
Uri uri = Uri.fromFile(dir);
fileManagers.setDataAndType(uri, "file/*");
startActivity(Intent.createChooser(fileManagers, null));

Upvotes: 0

Rakshit Nawani
Rakshit Nawani

Reputation: 2604

You can call the below function type is the package name of file-explorer like if you want to share data to Twitter call it like initShareIntent("com.twitter.android");

  private void initShareIntent(String type) {
        boolean found = false;
        Intent share = new Intent(android.content.Intent.ACTION_SEND);
        share.setType("image/jpeg");

        // gets the list of intents that can be loaded.
        List<ResolveInfo> resInfo = getActivity().getPackageManager().queryIntentActivities(share, 0);
        if (!resInfo.isEmpty()) {
            for (ResolveInfo info : resInfo) {
                if (info.activityInfo.packageName.toLowerCase().contains(type) ||
                        info.activityInfo.name.toLowerCase().contains(type)) {


                 //Share Data here

                    share.setPackage(info.activityInfo.packageName);
                    found = true;
                    break;
                }
            }
            if (!found) {
                Toast.makeText(getActivity(), share_type + " not found in Device", Toast.LENGTH_SHORT).show();
                return;
            }

            startActivity(Intent.createChooser(share, "Select"));
        }
    }

It will only open the particular app to share data. Try this and let me know if it helped you

Upvotes: 0

Aman Jain
Aman Jain

Reputation: 3045

Add this in your Intent, it would open a ES File Explorer

Intent intent = new Intent(android.content.Intent.ACTION_SEND);
intent.setType("*/*");
intent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(new File(filePath)));
intent.setPackage("com.estrongs.android.pop");
startActivity(shareIntent);

Upvotes: 0

Related Questions