2 csh 34 csh_34 于 2013.07.01 16:48 提问

在 android 中分享照片时如何过滤应用程序

我使用下面的代码通过其它的程序来来分享照片,然后打印它们的包名:

Intent sharingIntent = new Intent(Intent.ACTION_SEND);
sharingIntent.setType("image/jpeg");
sharingIntent.putExtra(Intent.EXTRA_STREAM, Uri.parse(FilePath));
PackageManager packageManager = this.getPackageManager();
List<ResolveInfo> resolveInfo = packageManager.queryIntentActivities(sharingIntent, PackageManager.MATCH_DEFAULT_ONLY);
int i = 0;
while(i < resolveInfo.size()) {
    System.out.println(i + "  " + resolveInfo.get(i).activityInfo.packageName);
    i++;
}
startActivity(Intent.createChooser(sharingIntent, "Share");

获取了下面的9个包名,可以分享照片:

06-29 16:55:22.460: I/System.out(13020): 0  com.amazon.kindle
06-29 16:55:22.460: I/System.out(13020): 1  com.android.bluetooth
06-29 16:55:22.460: I/System.out(13020): 2  com.google.android.apps.uploader
06-29 16:55:22.460: I/System.out(13020): 3  com.ecareme.asuswebstorage
06-29 16:55:22.460: I/System.out(13020): 4  com.google.android.talk
06-29 16:55:22.460: I/System.out(13020): 5  com.google.android.gm
06-29 16:55:22.460: I/System.out(13020): 6  com.aripollak.picturemap
06-29 16:55:22.460: I/System.out(13020): 7  com.instagram.android
06-29 16:55:22.460: I/System.out(13020): 8  com.facebook.katana

如果当我选择应用程序时想过滤一些其它的程序,例如,我想从app列表中过滤 facebook 程序,如何实现?

1个回答

Jave_
Jave_   2013.07.01 16:56
已采纳
    Intent it = new Intent(Intent.ACTION_SEND);
    it.setType("image/jpeg");
    List<ResolveInfo> resInfo = getPackageManager().queryIntentActivities(it, 0);
    if (!resInfo.isEmpty()) {
        List<Intent> targetedShareIntents = new ArrayList<Intent>();
        for (ResolveInfo info : resInfo) {
            Intent targeted = new Intent(Intent.ACTION_SEND);
            targeted.setType("image/jpeg";
            ActivityInfo activityInfo = info.activityInfo;

            // judgments : activityInfo.packageName, activityInfo.name, etc.
            if (activityInfo.packageName.contains("facebook") ||activityInfo.name.contains("facebook")) {
                continue;
            }
            targeted.setPackage(activityInfo.packageName);
            targetedShareIntents.add(targeted);
        }

        Intent chooserIntent = Intent.createChooser(targetedShareIntents.remove(0), "Select app to share");
        if (chooserIntent == null) {
            return;
        }
        try {
chooserIntent .putExtra(Intent.EXTRA_STREAM, Uri.parse(FilePath));
            startActivity(chooserIntent);
        } catch (android.content.ActivityNotFoundException ex) {
            Toast.makeText(this, "Can't find share component to share", Toast.LENGTH_SHORT).show();
        }
    }
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!