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

Android_开启应用

2015-09-15 16:30 447 查看
一.开启一个应用程序的方法

1.开启一个应用程序等于启动该应用程序的第一个activity,而第一个开启的activity由下面的<intent-filter>决定

<intent-filter>
<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
/**
* 开启应用程序 要开启应用程序 等于开启应用程序第一个加载的activity(<intent-filter>)
*
* @param packname
* 要开启应用程序的包名
*/
private void startApplication(String packname) {

PackageManager pm = getPackageManager();

// Intent intent = new Intent();
// intent.setAction("android.intent.action.MAIN");
// intent.addCategory("android.intent.category.LAUNCHER");
// // 获取所有可以启动的应用程序的IntentFilter
// List<ResolveInfo>infos= pm.queryIntentActivities(intent,
// PackageManager.GET_INTENT_FILTERS);

Intent intentForPackage = pm.getLaunchIntentForPackage(packname);

if (intentForPackage != null) {
startActivity(intentForPackage);
} else {
Toast.makeText(AppManagerActivity.this, "不能开启当前的应用程序", 0).show();
}
}
二.上面启动应用程序的方法 需要知道包名,这个业务方法可以获取手机所有应用程序的信息

/**
* 业务的方法 提供手机里安装的所有程序的信息
*
* @author 两点水
*
*/
public class AppInfoProvider {

private static final String TAG = "AppInfoProvider";

/**
* 获取所有的安装程序信息
*
* @param context
* @return
*/
public static List<AppInfo> getAppInfos(Context context) {

// 通过上下文获取package的管理者
PackageManager pm = context.getPackageManager();
// 通过管理者获取安装的程序的数据
List<PackageInfo> packages = pm.getInstalledPackages(0);

List<AppInfo> list = new ArrayList<AppInfo>();

for (PackageInfo packinfo : packages) {

AppInfo appinfo = new AppInfo();

// packinfo 相当于一个应用程序的清单文件
String packageName = packinfo.packageName;
Drawable icon = packinfo.applicationInfo.loadIcon(pm);
String name = packinfo.applicationInfo.loadLabel(pm).toString();
int flags = packinfo.applicationInfo.flags;// 应用程序的标志信息
Log.i(TAG, "应用程序的标志信息为:flags=" + flags);

if ((flags & ApplicationInfo.FLAG_SYSTEM) == 0) { // 进行与运算 相同为1
// 用户的程序
appinfo.setUserApp(true);
} else {
// 系统程序
appinfo.setUserApp(false);
}
if ((flags & ApplicationInfo.FLAG_EXTERNAL_STORAGE) == 0) {
// 手机内存
appinfo.setInRom(true);
} else {
// 外部存储
appinfo.setInRom(false);
}

appinfo.setIcon(icon);
appinfo.setName(name);
appinfo.setPackname(packageName);

list.add(appinfo);
}
return list;
}
}

个人总结记忆:

开启一个应用程序(startActivity(intentForPackage);),就需要开启应用程序的意图和开启应用程序的意图属性(getLaunchIntentForPackage(packname)),然而上面的方法是获取Package的相关信息,其实也是配置文件中的信息,所以我们要得到一个包的管理者(getPackageManager())。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: