package com.forfan.bigbang.util; import android.content.ActivityNotFoundException; import android.content.Context; import android.content.Intent; import android.content.pm.ResolveInfo; import android.net.Uri; import android.os.Parcelable; import android.text.TextUtils; import android.widget.Toast; import com.forfan.bigbang.BigBangApp; import com.forfan.bigbang.component.activity.BigBangActivity; import com.forfan.bigbang.component.activity.share.ShareAppManagerActivity; import com.forfan.bigbang.onestep.ResolveInfoWrap; import com.google.gson.Gson; import com.google.gson.JsonSyntaxException; import com.google.gson.reflect.TypeToken; import com.shang.commonjar.contentProvider.SPHelper; import java.io.File; import java.util.ArrayList; import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.Set; public class SharedIntentHelper { public static final int TYPE_URL = 0; private static final int TYPE_GEO = 1; private static final int TYPE_TEL = 2; private static final int TYPE_SEND = 3; public static List<ResolveInfoWrap> listFilterIntents(Context context) { List<ResolveInfoWrap> list = listIntents(context); removeDisApps(list, context); return list; } private static void resort(List<ResolveInfoWrap> list, Context context) { String appIndexs = context.getSharedPreferences(ShareAppManagerActivity.SHARE_APPS, Context.MODE_PRIVATE).getString(ConstantUtil.SHARE_APP_INDEX, ""); ArrayList<String> strings = null; if (!TextUtils.isEmpty(appIndexs)) { try { strings = new Gson().fromJson(appIndexs, new TypeToken<ArrayList<String>>() { }.getType()); } catch (JsonSyntaxException e) { e.printStackTrace(); } if (strings == null) strings = new ArrayList<>(); List<ResolveInfoWrap> resolveInfoWraps = new ArrayList<>(); //数组去重 String[] array = strings.toArray(new String[0]); List<String> singleStringApps = new ArrayList<>(); singleStringApps.add(array[0]); for(int i=1;i<array.length;i++){ if(singleStringApps.toString().indexOf(array[i]) == -1){ singleStringApps.add(array[i]); } } //包含了则放到最前面 for (String str : singleStringApps) { for (ResolveInfoWrap resolveInfoWrap : list) { if (resolveInfoWrap.resolveInfo.loadLabel(context.getPackageManager()).toString().equalsIgnoreCase(str)) { resolveInfoWraps.add(resolveInfoWrap); } } } //不包含则add进去 for(ResolveInfoWrap resolveInfoWrap :list){ if(!resolveInfoWraps.contains(resolveInfoWrap)){ resolveInfoWraps.add(resolveInfoWrap); } } list.clear(); list.addAll(resolveInfoWraps); } } public static void saveShareAppIndexs2Sp(List<ResolveInfoWrap> list, Context context) { ArrayList<String> string = new ArrayList<>(); for (ResolveInfoWrap resolveInfoWrap : list) { String name =resolveInfoWrap.resolveInfo.loadLabel(context.getPackageManager()).toString(); if(!string.contains(name)) string.add(name); } context.getSharedPreferences(ShareAppManagerActivity.SHARE_APPS, Context.MODE_PRIVATE).edit(). putString(ConstantUtil.SHARE_APP_INDEX, new Gson().toJson(string)).apply(); } private static List<ResolveInfoWrap> removeDisApps(List<ResolveInfoWrap> list, Context context) { Set<String> names = new HashSet<>(); names = context.getSharedPreferences(ShareAppManagerActivity.SHARE_APPS, Context.MODE_PRIVATE).getStringSet(ConstantUtil.SHARE_APPS_DIS, names); List<ResolveInfoWrap> removedResolveInfoWraps = new ArrayList<>(); List<ResolveInfoWrap> addedresolveInfoWraps = new ArrayList<>(); addedresolveInfoWraps.addAll(list); for (String name : names) { for (ResolveInfoWrap wrap : list) { if (name != null && name.equalsIgnoreCase(wrap.resolveInfo.loadLabel(context.getPackageManager()).toString())) { removedResolveInfoWraps.add(wrap); addedresolveInfoWraps.remove(wrap); } } } list.clear(); list.addAll(addedresolveInfoWraps); return removedResolveInfoWraps; } public static List<ResolveInfoWrap> listIntents(Context paramContext) { ArrayList localArrayList = new ArrayList(); Intent localIntent1 = new Intent("android.intent.action.VIEW", Uri.parse("geo:0,0")); Intent localIntent2 = new Intent("android.intent.action.DIAL", Uri.parse("tel:10086")); Object localObject = new Intent("android.intent.action.VIEW", Uri.parse("http://www.baidu.com")); localObject = paramContext.getPackageManager().queryIntentActivities((Intent) localObject, 0).iterator(); while (((Iterator) localObject).hasNext()) { ResolveInfo localResolveInfo = (ResolveInfo) ((Iterator) localObject).next(); if (localResolveInfo.activityInfo.name.contains("taobao")) { localArrayList.add(new ResolveInfoWrap(localResolveInfo, TYPE_URL)); } } for (ResolveInfo r : paramContext.getPackageManager().queryIntentActivities(localIntent1, 0)) { localArrayList.add(new ResolveInfoWrap(r, TYPE_GEO)); } for (ResolveInfo r : paramContext.getPackageManager().queryIntentActivities(localIntent2, 0)) { localArrayList.add(new ResolveInfoWrap(r, TYPE_TEL)); } localIntent1 = new Intent("android.intent.action.SEND"); localIntent1.setType("text/plain"); for (ResolveInfo r : paramContext.getPackageManager().queryIntentActivities(localIntent1, 0)) { localArrayList.add(new ResolveInfoWrap(r, TYPE_SEND)); } resort(localArrayList,paramContext); return localArrayList; } public static void sendImageShareIntent(Context paramContext, String paramString) { Intent localIntent = new Intent("android.intent.action.SEND"); localIntent.addFlags(268435456); localIntent.setType("image/*"); localIntent.putExtra("android.intent.extra.STREAM", Uri.fromFile(new File(paramString))); Intent.createChooser(localIntent, "请选择").addFlags(268435456); paramContext.startActivity(localIntent); } public static void sendShareIntent(Context context, String paramString) { ArrayList<ResolveInfo> resolveArrayList = new ArrayList(); Intent geoIntent = new Intent("android.intent.action.VIEW", Uri.parse("geo:0,0?q=" + paramString)); Intent callIntent = new Intent("android.intent.action.DIAL", Uri.parse("tel:10086")); Intent urlInent = new Intent("android.intent.action.VIEW", Uri.parse("http://www.baidu.com")); List<ResolveInfo> callResoves = context.getPackageManager().queryIntentActivities(callIntent, 0); List<ResolveInfo> geoResolves = context.getPackageManager().queryIntentActivities((Intent) geoIntent, 0); List<ResolveInfo> urlResolves = context.getPackageManager().queryIntentActivities((Intent) urlInent, 0); Intent textIntent = new Intent("android.intent.action.SEND"); textIntent.setType("text/plain"); List<ResolveInfo> textResolves = context.getPackageManager().queryIntentActivities(textIntent, 0); resolveArrayList.addAll(callResoves); resolveArrayList.addAll(geoResolves); resolveArrayList.addAll(textResolves); ArrayList<Intent> intentArrayList = new ArrayList<>(); if (textResolves.size() > 0) { Intent intent = new Intent("android.intent.action.SEND"); intent.setType("text/plain"); intent.putExtra("android.intent.extra.TEXT", paramString); intentArrayList.add(intent); } for (ResolveInfo resolveInfo : geoResolves) { Intent intent = new Intent("android.intent.action.VIEW", Uri.parse("geo:0,0?q=" + paramString)); intent.setClassName(resolveInfo.activityInfo.packageName, resolveInfo.activityInfo.name); intentArrayList.add(intent); } for (ResolveInfo resolveInfo : urlResolves) { if (resolveInfo.activityInfo.packageName.equalsIgnoreCase("com.taobao.taobao")) { Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://s.taobao.com/search?q=" + paramString)); intent.setPackage(resolveInfo.activityInfo.packageName); intentArrayList.add(intent); } } if (callResoves.size() > 0) { intentArrayList.add(new Intent("android.intent.action.DIAL", Uri.parse("tel:" + paramString))); } if (intentArrayList.size() < 0) { ToastUtil.show("未能找到可以分享的应用"); return; } // LabeledIntent[] extraIntents = new LabeledIntent[intentArrayList.size()]; // extraIntents = intentArrayList.toArray(extraIntents); Intent firstIntent = intentArrayList.remove(0); // assuming you will have at least one Intent if (firstIntent == null) { ToastUtil.show("未能找到可以分享的应用"); return; } Intent openInChooser = Intent.createChooser(firstIntent, "分享到"); openInChooser.putExtra(Intent.EXTRA_INITIAL_INTENTS, (Parcelable[]) ((List) intentArrayList).toArray(new Parcelable[intentArrayList.size()])); try { context.startActivity(openInChooser); return; } catch (ActivityNotFoundException e) { Toast.makeText(context, "未能找到可以分享的应用", 0).show(); } } public static void share(BigBangActivity bigBangActivity, ResolveInfoWrap item, String mSelectText) { if (item.type == TYPE_GEO) { Intent intent = new Intent("android.intent.action.VIEW", Uri.parse("geo:0,0?q=" + mSelectText)); intent.setClassName(item.resolveInfo.activityInfo.packageName, item.resolveInfo.activityInfo.name); bigBangActivity.startActivity(intent); } else if (item.type == TYPE_SEND) { Intent intent = new Intent("android.intent.action.SEND"); intent.setType("text/plain"); intent.putExtra("android.intent.extra.TEXT", mSelectText); intent.setClassName(item.resolveInfo.activityInfo.packageName, item.resolveInfo.activityInfo.name); bigBangActivity.startActivity(intent); } else if (item.type == TYPE_TEL) { Intent intent = new Intent("android.intent.action.DIAL", Uri.parse("tel:" + mSelectText)); intent.setClassName(item.resolveInfo.activityInfo.packageName, item.resolveInfo.activityInfo.name); bigBangActivity.startActivity(intent); } else if (item.type == TYPE_URL) { if (item.resolveInfo.activityInfo.packageName.equalsIgnoreCase("com.taobao.taobao")) { Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://s.taobao.com/search?q=" + mSelectText)); intent.setClassName(item.resolveInfo.activityInfo.packageName, item.resolveInfo.activityInfo.name); bigBangActivity.startActivity(intent); } else { Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(mSelectText)); intent.setClassName(item.resolveInfo.activityInfo.packageName, item.resolveInfo.activityInfo.name); bigBangActivity.startActivity(intent); } } } }