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

本文介绍了一种在Android平台上启动包含指定字符串的应用的方法。首先定义了存储应用信息的ApkItemInfo类,并实现了根据包名启动应用的功能。然后详细说明了如何查找并启动包含特定字符串的应用,包括启动自有平台应用的逻辑。

 需求背景:首先获取所有的包含"优快云"字符串的应用,如果包名为自己平台中的固定包名,则先启动自己平台的包名,没有的话,

    再随机启动一个包含"优快云"字符串的应用(取第一个搜索到的)


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) {
			// 首先获取所有的包含"优快云"字符串的应用,如果包名为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) {
				// 没有的话就跳出循环,再随机启动一个包含"优快云"字符串的应用(取第一个搜索到的)
				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.youkuaiyun.com/detail/buluodebeidou/8067565

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值