方法一:最直接的就是知道apk的包名和启动类名, 直接启动
1 | Intent mIntent = new Intent( ); |
2 | ComponentName comp = new ComponentName( "包名" , "类名" ); |
3 | mIntent.setComponent(comp); |
4 | mIntent.setAction( "android.intent.action.VIEW" ); |
5 |
6 | startActivity(mIntent); |
方法二:如果只知道包名,在这种情况下通常也可以启动,通常调用publicabstract Intent getLaunchIntentForPackage(String packageName)
大概意思就是返回一个程序入口的Intent,就是Java程序的Main方法。直接startActivity(返回的intent)即可。
Intent mIntent = getPackageManager()getLaunchIntentForPackage(packageName);
if(mIntent != null) startActivity(mIntent);
方法三:如果不知道包名类名的话,用隐式意图Intent来启动。
具体实现代码:
-
Intent intent = new Intent("注册的Action");
startActivity(intent); 即可启动一个Activity,和调用系统相机拍照,调用文件管理选择文件同一个写法
-
通过 PackageManager 获取本机安装的应用,PackageManager可以得到包名,程序名和icon等应用信息,然后通过包名来启动,代码如下:
PackageInfo pi;
try {
pi = getPackageManager().getPackageInfo(packageName, 0);
Intent resolveIntent = new Intent(Intent.ACTION_MAIN, null);
resolveIntent.setPackage(pi.packageName);
PackageManager pManager = getPackageManager();
List apps = pManager.queryIntentActivities(
resolveIntent, 0);
ResolveInfo ri = apps.iterator().next();
if (ri != null) {
packageName = ri.activityInfo.packageName;
String className = ri.activityInfo.name;
Intent intent = new Intent(Intent.ACTION_MAIN);
ComponentName cn = new ComponentName(packageName, className);
intent.setComponent(cn);
startActivity(intent);
}
} catch (NameNotFoundException e) {
e.printStackTrace();
}