Android 分享功能,过滤掉不需要的组件,解决出现“Android系统“问题

来源:互联网 发布:日本av作品番号数据库 编辑:程序博客网 时间:2024/05/22 17:18

转载自:http://www.dewen.io/q/1742#ans3804

但是实际开发中遇到一个问题,就是有些应用会注册多个send入口,比如qq、微信和百度云,这个时候过滤出来的包名是相同的,相同的包名会被系统包裹为“Android系统”,十分影响用户体验,经过研究修改如下(红色部分为主要修改点,这样就可以指定具体Activity,避免因为包名相同而出现“Android系统”现象):

public static void shareContentNoUs(Context context, String text) {        Activity activity = (Activity) context;        Intent it = new Intent(Intent.ACTION_SEND);        it.setType("text/plain");        List<ResolveInfo> resInfo = activity.getPackageManager().queryIntentActivities(it,                PackageManager.MATCH_DEFAULT_ONLY);        if (!resInfo.isEmpty()) {            List<Intent> targetedShareIntents = new ArrayList<Intent>();            for (ResolveInfo info : resInfo) {                Intent targeted = new Intent(Intent.ACTION_SEND);                targeted.setType("text/plain");                ActivityInfo activityInfo = info.activityInfo;                // judgments : activityInfo.packageName, activityInfo.name, etc.                if (activityInfo.packageName.contains("bluetooth") || activityInfo.name.contains("bluetooth")) {                    continue;                } else if (activityInfo.packageName.contains("com.suning.netdisk")) {                    continue;                }                targeted.putExtra(Intent.EXTRA_SUBJECT, context.getString(R.string.share));                targeted.putExtra(Intent.EXTRA_TEXT, text);                targeted.setPackage(activityInfo.packageName);                <span style="color:#ff0000;">targeted.setClassName(activityInfo.packageName, activityInfo.name);</span>                targetedShareIntents.add(targeted);            }            try {                if (targetedShareIntents.size() == 0) {                    Toast.makeText(activity, "不存在分享组件", Toast.LENGTH_SHORT).show();                    return;                }                Intent chooserIntent = Intent.createChooser(targetedShareIntents.remove(0),                        context.getString(R.string.share_choose_application));                if (chooserIntent == null) {                    return;                }                // A Parcelable[] of Intent or LabeledIntent objects as set with                // putExtra(String, Parcelable[]) of additional activities to place                // a the front of the list of choices, when shown to the user with a                // ACTION_CHOOSER.                chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, targetedShareIntents.toArray(new Parcelable[] {}));                activity.startActivity(chooserIntent);            } catch (Exception ex) {                Toast.makeText(activity, "不存在分享组件", Toast.LENGTH_SHORT).show();            }        } else {            Toast.makeText(activity, "不存在分享组件", Toast.LENGTH_SHORT).show();        }    }

0 0
原创粉丝点击