需求背景:首先获取所有的包含"优快云"字符串的应用,如果包名为自己平台中的固定包名,则先启动自己平台的包名,没有的话,
再随机启动一个包含"优快云"字符串的应用(取第一个搜索到的)
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
本文介绍了一种在Android平台上启动包含指定字符串的应用的方法。首先定义了存储应用信息的ApkItemInfo类,并实现了根据包名启动应用的功能。然后详细说明了如何查找并启动包含特定字符串的应用,包括启动自有平台应用的逻辑。
8923

被折叠的 条评论
为什么被折叠?



