您的位置:首页 > 移动开发 > Android开发

android 启动手机内包含固定字符串的apk应用

2014-10-22 11:55 148 查看
需求背景:首先获取所有的包含"CSDN"字符串的应用,如果包名为自己平台中的固定包名,则先启动自己平台的包名,没有的话,

再随机启动一个包含"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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐