//工具类
public class JumpEvaluateAppUtils { private List<AppInfo> appInfos; private Dialog signRuleDialog; public JumpEvaluateAppUtils(Context context) { ArrayList<String> list= getFilterInstallMarkets(context,InstalledAPPs(context)); for (int i = 0; i < list.size(); i++) { Log.e("JumpEvaluateAppUtils",list.get(i)); } signRule(context); signRuleDialog.show(); } /** * 获取已安装应用商店的包名列表 * * @param context * @return */ public static ArrayList<String> InstalledAPPs(Context context) { ArrayList<String> pkgs = new ArrayList<String>(); if (context == null) return pkgs; Intent intent = new Intent(); intent.setAction("android.intent.action.MAIN"); intent.addCategory("android.intent.category.APP_MARKET"); PackageManager pm = context.getPackageManager(); List<ResolveInfo> infos = pm.queryIntentActivities(intent, 0); if (infos == null || infos.size() == 0) return pkgs; int size = infos.size(); for (int i = 0; i < size; i++) { String pkgName = ""; try { ActivityInfo activityInfo = infos.get(i).activityInfo; pkgName = activityInfo.packageName; } catch (Exception e) { e.printStackTrace(); } if (!TextUtils.isEmpty(pkgName)) pkgs.add(pkgName); } return pkgs; } public ArrayList<String> getFilterInstallMarkets(Context context, ArrayList<String> pkgs) { appInfos = new ArrayList<>(); appInfos.clear(); ArrayList<String> appList = new ArrayList<String>(); if (context == null || pkgs == null || pkgs.size() == 0) return appList; PackageManager pm = context.getPackageManager(); List<PackageInfo> installedPkgs = pm.getInstalledPackages(0); int li = installedPkgs.size(); int lj = pkgs.size(); for (int j = 0; j < lj; j++) { for (int i = 0; i < li; i++) { String installPkg = ""; String checkPkg = pkgs.get(j); PackageInfo packageInfo = installedPkgs.get(i); try { installPkg = packageInfo.packageName; } catch (Exception e) { e.printStackTrace(); } if (TextUtils.isEmpty(installPkg)) continue; if (installPkg.equals(checkPkg)) { // 如果非系统应用,则添加至appList,这个会过滤掉系统的应用商店,如果不需要过滤就不用这个判断 // if ((packageInfo.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) == 0) { //将应用相关信息缓存起来,用于自定义弹出应用列表信息相关用 AppInfo appInfo = new AppInfo(); appInfo.setAppName(packageInfo.applicationInfo.loadLabel(context.getPackageManager()).toString()); appInfo.setAppIcon(packageInfo.applicationInfo.loadIcon(context.getPackageManager())); appInfo.setPackageName(packageInfo.packageName); appInfo.setVersionCode(packageInfo.versionCode); appInfo.setVersionName(packageInfo.versionName); Log.e("JumpEvaluateAppUtils",appInfo.toString()); appInfos.add(appInfo); appList.add(installPkg); // } break; } } } return appList; } /** * 跳转到app详情界面 * @param appPkg App的包名 * @param marketPkg * 应用商店包名 ,如果为""则由系统弹出应用商店列表供用户选择,否则调转到目标市场的应用详情界面,某些应用商店可能会失败 */ public static void launchAppDetail(Context context, String appPkg, String marketPkg) { try { if (TextUtils.isEmpty(appPkg)) return; Uri uri = Uri.parse("market://details?id=" + appPkg); Intent intent = new Intent(Intent.ACTION_VIEW, uri); if (!TextUtils.isEmpty(marketPkg)) intent.setPackage(marketPkg); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(intent); } catch (Exception e) { e.printStackTrace(); } } public void signRule(final Context context) { signRuleDialog = new Dialog(context, R.style.MyDialog); View view = LayoutInflater.from(context).inflate(R.layout.appinfo_dialog, null); GridView gv = (GridView) view.findViewById(R.id.jump_gv); gv.setAdapter(new JumpAdapter(context,appInfos)); gv.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { launchAppDetail(context,context.getPackageName(),appInfos.get(position).getPackageName()); signRuleDialog.dismiss(); } }); Window window = signRuleDialog.getWindow(); WindowManager.LayoutParams layoutParams = new WindowManager.LayoutParams(); layoutParams.width = WindowManager.LayoutParams.MATCH_PARENT; layoutParams.height = WindowManager.LayoutParams.MATCH_PARENT; window.setAttributes(layoutParams); signRuleDialog.setContentView(view, layoutParams); } }
//bean类
public class AppInfo { private String AppName; private Drawable AppIcon; private String PackageName; private int VersionCode; private String VersionName; public String getAppName() { return AppName; } public void setAppName(String appName) { AppName = appName; } public Drawable getAppIcon() { return AppIcon; } public void setAppIcon(Drawable appIcon) { AppIcon = appIcon; } public String getPackageName() { return PackageName; } public void setPackageName(String packageName) { PackageName = packageName; } public int getVersionCode() { return VersionCode; } public void setVersionCode(int versionCode) { VersionCode = versionCode; } public String getVersionName() { return VersionName; } public void setVersionName(String versionName) { VersionName = versionName; } @Override public String toString() { return "AppInfo{" + "AppName='" + AppName + '\'' + ", AppIcon=" + AppIcon + ", PackageName='" + PackageName + '\'' + ", VersionCode=" + VersionCode + ", VersionName='" + VersionName + '\'' + '}'; } }//adapter
public class JumpAdapter extends BaseAdapter { Context mContext; List<AppInfo> mData; public JumpAdapter(Context context, List<AppInfo> list) { this.mContext = context; this.mData = list; } @Override public int getCount() { return mData.size(); } @Override public Object getItem(int position) { return null; } @Override public long getItemId(int position) { return position; } @Override public View getView(final int position, View convertView, ViewGroup parent) { ViewHolder1 viewHolder; if (convertView == null) { viewHolder = new ViewHolder1(); convertView = LayoutInflater.from(mContext).inflate( R.layout.jump_item, null); viewHolder.jump_iv = (ImageView) convertView .findViewById(R.id.jump_iv); viewHolder.jump_name = (TextView) convertView .findViewById(R.id.jump_name); viewHolder.jump_iv.setImageDrawable(mData.get(position).getAppIcon()); viewHolder.jump_name.setText(mData.get(position).getAppName()); } else { viewHolder = (ViewHolder1) convertView.getTag(); } return convertView; } } class ViewHolder1 { ImageView jump_iv; TextView jump_name; }//style
<style name="MyDialog" parent="android:Theme.Dialog"> <item name="android:windowBackground">@android:color/transparent</item> <item name="android:windowIsFloating">false</item> <item name="android:windowContentOverlay">@null</item> <item name="android:windowNoTitle">true</item> </style>
//appinfo_dialog.xml
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <LinearLayout android:background="@color/colorAccent" android:layout_centerInParent="true" android:layout_width="250dp" android:layout_height="200dp"> <GridView android:id="@+id/jump_gv" android:layout_width="wrap_content" android:layout_height="wrap_content" android:numColumns="3"></GridView> </LinearLayout> </RelativeLayout>//jump_item.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:id="@+id/jump_ll" android:background="#fff" android:layout_width="match_parent" android:layout_height="match_parent"> <ImageView android:id="@+id/jump_iv" android:layout_gravity="center_horizontal" android:src="@mipmap/ic_launcher" android:layout_width="50dp" android:layout_height="50dp" /> <TextView android:id="@+id/jump_name" android:layout_gravity="center_horizontal" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="test"/> </LinearLayout>//调用
new JumpEvaluateAppUtils(MainActivity.this);