android 启动手机内包含固定字符串的apk应用
2014-10-22 11:55
148 查看
需求背景:首先获取所有的包含"CSDN"字符串的应用,如果包名为自己平台中的固定包名,则先启动自己平台的包名,没有的话,
再随机启动一个包含"CSDN"字符串的应用(取第一个搜索到的)
1.首先建立一个ApkItemInfo类,用于保存应用apk的信息
2.一个简单的根据包名启动apk的类
3.根据字符串获取需要启动的应用(包含了一些其他的方法)
4.主界面布局的展示
代码:
http://download.csdn.net/detail/buluodebeidou/8067565
再随机启动一个包含"CSDN"字符串的应用(取第一个搜索到的)
1.首先建立一个ApkItemInfo类,用于保存应用apk的信息
package com.example.testapkinfo; import android.graphics.drawable.Drawable; public class ApkItemInfo { private Drawable icon; private String label; private String packageName; public Drawable getIcon() { return icon; } public void setIcon(Drawable icon) { this.icon = icon; } public String getLabel() { return label; } public void setLabel(String label) { this.label = label; } public String getPackageName() { return packageName; } public void setPackageName(String packageName) { this.packageName = packageName; } @Override public String toString() { return "ApkItemInfo [icon=" + icon + ", label=" + label + ", packageName=" + packageName + "]"; } }
2.一个简单的根据包名启动apk的类
/** * @FILE:SystemUtil.java * @AUTHOR:<span style="font-family: Arial, Helvetica, sans-serif;">fibanaci</span> * @DATE: **/ package com.example.testapkinfo; import android.content.Context; import android.content.Intent; /******************************************* * * @CLASS:SystemUtil * @DESCRIPTION: * @AUTHOR:fibanaci * @VERSION:v1.0 * @DATE: *******************************************/ public class SystemUtil { public static void startApp(Context context,String packageName){ Intent intent = context.getPackageManager().getLaunchIntentForPackage(packageName); if(intent!=null) context.startActivity(intent); } }
3.根据字符串获取需要启动的应用(包含了一些其他的方法)
package com.example.testapkinfo; import java.util.ArrayList; import java.util.List; import android.content.Context; import android.content.Intent; import android.content.pm.ActivityInfo; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.content.pm.PackageManager.NameNotFoundException; import android.content.pm.ResolveInfo; import android.widget.Toast; public class Utils { /** * @description: 获取可以启动启动的app * @author:fibanaci * @return:PackageInfo * @param context * @return */ public static void startSelectApps(Context context, String localPackageName) { // 首先获取所有的可用的app // PackageInfo packageInfo; List<PackageInfo> paklist = getAllSelectedApps(context); int count = 0; if (paklist.size() > 0) { // 首先获取所有的包含"CSDN"字符串的应用,如果包名为V5平台中的包名,则先启动V5平台的包名 // PackageManager pManager = context.getPackageManager(); for (PackageInfo packageInfo2 : paklist) { String mPackageName = packageInfo2.applicationInfo.packageName; if (mPackageName.equals(localPackageName)) { SystemUtil.startApp(context, packageInfo2.applicationInfo.packageName); count++; } } // 如果 if (count == 0) { // 没有的话就跳出循环,再随机启动一个包含"CSDN"字符串的应用(取第一个搜索到的) SystemUtil.startApp(context, paklist.get(0).packageName); } } else { // 从后台配置的地址下载 Toast.makeText(context, "您手机中没有" + Constant.APPINFO_LABEL + "的包,现通过浏览器下载", Toast.LENGTH_LONG).show(); } } /** * @description: 获取所有可以启动的app的包信息 * @author:fibanaci * @return:List<PackageInfo> * @param context * @return */ public static List<PackageInfo> getAllSelectedApps(Context context) { List<PackageInfo> apps = new ArrayList<PackageInfo>(); PackageManager pManager = context.getPackageManager(); // 获取手机内所有应用 List<PackageInfo> paklist = pManager.getInstalledPackages(0); for (int i = 0; i < paklist.size(); i++) { PackageInfo pak = (PackageInfo) paklist.get(i); String appLabel = pak.applicationInfo.loadLabel(pManager) .toString(); if (appLabel.equals(Constant.APPINFO_LABEL)) { apps.add(pak); } } return apps; } public static List<PackageInfo> getAllApps(Context context) { List<PackageInfo> apps = new ArrayList<PackageInfo>(); PackageManager pManager = context.getPackageManager(); // 获取手机内所有应用 List<PackageInfo> paklist = pManager.getInstalledPackages(0); for (int i = 0; i < paklist.size(); i++) { PackageInfo pak = (PackageInfo) paklist.get(i); pak.applicationInfo.loadLabel(pManager); // 判断是否为非系统预装的应用程序 if ((pak.applicationInfo.flags & pak.applicationInfo.FLAG_SYSTEM) <= 0) { // customs applications apps.add(pak); } } return apps; } /** * 查询手机内所有支持分享的应用 * * @param context * @return */ public static List<ResolveInfo> getShareApps(Context context) { List<ResolveInfo> mApps = new ArrayList<ResolveInfo>(); Intent intent = new Intent(Intent.ACTION_SEND, null); intent.addCategory(Intent.CATEGORY_DEFAULT); intent.setType("text/plain"); PackageManager pManager = context.getPackageManager(); mApps = pManager.queryIntentActivities(intent, PackageManager.COMPONENT_ENABLED_STATE_DEFAULT); return mApps; } }
4.主界面布局的展示
package com.example.testapkinfo; import android.app.Activity; import android.os.Bundle; import android.util.DisplayMetrics; import android.view.Menu; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; public class MainActivity extends Activity { Button mButton; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mButton=(Button) findViewById(R.id.button); DisplayMetrics displayMetrics = new DisplayMetrics(); this.getWindowManager().getDefaultDisplay().getMetrics(displayMetrics); mButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub Utils.startSelectApps(getApplicationContext(), "com.example.te"); } }); } }
代码:
http://download.csdn.net/detail/buluodebeidou/8067565
相关文章推荐
- 【Android】获取手机中已安装apk文件信息(PackageInfo、ResolveInfo)(应用图片、应用 ...
- 【Android】获取手机中已安装apk文件信息(PackageInfo、ResolveInfo)(应用图片、应用 ...
- Android获取手机中已安装apk文件信息(PackageInfo、ResolveInfo)(应用图片、应用名、包名等)
- 探秘腾讯Android手机游戏平台之不安装游戏APK直接启动法
- 【Android】获取手机中已安装apk文件信息(PackageInfo、ResolveInfo)(应用图片、应用名、包名等) .
- 【Android】获取手机中已安装apk文件信息(PackageInfo、ResolveInfo)(应用图片、应用名、包名等) 收藏
- 【Android】获取手机中已安装apk文件信息(PackageInfo、ResolveInfo)(应用图片、应用名、包名等)
- Android系统apk应用的另一种启动方法---am命令---张子芳
- 【Android】获取手机中已安装apk文件信息(PackageInfo、ResolveInfo)(应用图片、应用名、包名等)
- 从android一个apk中启动第三方apk应用
- 【Android】获取手机中已安装apk文件信息(PackageInfo、ResolveInfo)(应用图片、应用名、包名等) 收藏
- 【转】探秘腾讯Android手机游戏平台之不安装游戏APK直接启动法
- 【Android】获取手机中已安装apk文件信息(PackageInfo、ResolveInfo)(应用图片、应用名、包名等)
- 探秘腾讯Android手机游戏平台之不安装游戏APK直接启动法
- 【Android】获取手机中已安装apk文件信息(PackageInfo、ResolveInfo)(应用图片、应用名、包名等)
- 【Android】获取手机中已安装apk文件信息(PackageInfo、ResolveInfo)(应用图片、应用名、包名等)
- 探秘腾讯Android手机游戏平台之不安装游戏APK直接启动法
- Android--入门---8---(详解申请证书并将Android的工程打包为APK手机应用软件)
- android应用中启动设备中其它apk
- 【Android】获取手机中已安装apk文件信息(PackageInfo、ResolveInfo)(应用图片、应用名、包名等)