您的位置:首页 > 其它

启动apk或者服务的常用方法

2013-08-08 09:52 302 查看
(一、)启动apk的常用方法

方法一:最直接的就是知道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
abstractIntentgetLaunchIntentForPackage
(StringpackageName)

大概意思就是返回一个程序入口的Intent,就是Java程序的Main方法。直接startActivity(返回的intent)即可。

IntentmIntent=getPackageManager()getLaunchIntentForPackage(packageName);

if(mIntent
!=null)startActivity(mIntent);

方法三:就是如何只提供apk,如何启动呢?在这种情况下,通常只能在sdk源代码下来编译完成

通常引入android.content.pm.PackageParser;

见code:

查看源码

打印?

01
/*
02
03
*
UtilitymethodtogetapplicationinformationforagivenpackageURI
04
05
*/
06
07
public
ApplicationInfo
getApplicationInfo(UripackageURI){
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的包名,接下来方式就和方法二一样则可

(二)、开机自启动服务或应用

今天我们主要来探讨android怎么让一个service开机自动启动功能的实现。Android手机在启动的过程中会触发一个StandardBroadcastAction,名字叫android.intent.action.BOOT_COMPLETED(记得只会触发一次呀),在这里我们可以通过构建一个广播接收者来接收这个这个action.下面我就来简单写以下实现的步骤:

第一步:首先创建一个广播接收者,重构其抽象方法onReceive(Contextcontext,Intentintent),在其中启动你想要启动的Service或app。

importandroid.content.BroadcastReceiver;

importandroid.content.Context;

importandroid.content.Intent;

importandroid.util.Log;



publicclassBootBroadcastReceiverextendsBroadcastReceiver{

//重写onReceive方法

@Override

publicvoidonReceive(Contextcontext,Intentintent){

//后边的XXX.class就是要启动的服务

Intentservice=newIntent(context,XXXclass);

context.startService(service);

Log.v("TAG","开机自动服务自动启动.....");

//启动应用,参数为需要自动启动的应用的包名

Intentintent=getPackageManager().getLaunchIntentForPackage(packageName);

context.startActivity(intent);


}



}

第二步:配置xml文件,在receiver接收这种添加intent-filter配置

<receiverandroid:name="BootBroadcastReceiver">

<intent-filter>

<actionandroid:name="android.intent.action.BOOT_COMPLETED"></action>

<categoryandroid:name="android.intent.category.LAUNCHER"/>

</intent-filter>

</receiver>

第三步:添加权限<uses-permissionandroid:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: