方法一:最直接的就是知道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); |
方法二:如果只知道包名,
在这种情况下通常也可以启动,通常调用public abstract Intent getLaunchIntentForPackage (String packageName)
大概意思就是返回一个程序入口的Intent,就是Java程序的Main方法。直接startActivity(返回的intent)即可。
Android SDK中有这样一个API:
public abstract Intent getLaunchIntentForPackage (String packageName)
如果packageName存在返回入口Intent, startActivity(Intent)可以启动应用,否则返回nullimport android.app.Activity;
下面有个小示例:
- import android.content.Intent;
- import android.content.pm.PackageInfo;
- import android.content.pm.PackageManager;
- import android.os.Bundle;
- import android.view.View;
- public class Main extends Activity {
- /** Called when the activity is first created. */
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- PackageManager packageManager = getPackageManager();
- Intent intent=new Intent();
- intent =packageManager.getLaunchIntentForPackage("pkgName");
- if(intent==null){
- System.out.println("APP not found!");
- }
- startActivity(intent);
- }
- }
-
方法三:就是如何只提供apk,如何启动呢?
在这种情况下,通常只能在sdk源代码下来编译完成
通常引入android.content.pm.PackageParser;
见code:
01
/*
02
03
* Utility method to get application information for a given packageURI
04
05
*/
06
07
public
ApplicationInfo getApplicationInfo(Uri packageURI) {
08
09
final
String archiveFilePath = packageURI.getPath();
10
11
PackageParser packageParser =
new
PackageParser(archiveFilePath);
12
13
File sourceFile =
new
File(archiveFilePath);
14
15
DisplayMetrics metrics =
new
DisplayMetrics();
16
17
metrics.setToDefaults();
18
19
PackageParser.Package pkg = packageParser.parsePackage(sourceFile, archiveFilePath, metrics,
0
);
20
21
if
(pkg ==
null
) {
22
23
return
null
;
24
25
}
26
27
return
pkg.applicationInfo;
28
29
}
这样就可以得到该apk的包名,接下来方式就和方法二一样则可