Android 启动另一个App/apk中的Activity实现代码
Android启动另一个App/apk中的Activity实现代码
前言:
Android提供了在一个App中启动另一个App中的Activity的能力,这使我们的程序很容易就可以调用其他程序的功能,从而就丰富了我们App的功能。比如在微信中发送一个位置信息,对方可以点击这个位置信息启动腾讯地图并导航。这个场景在现实中作用很大,尤其是朋友在陌生的环境找不到对方时,这个功能简直就是救星。
本来想把本文的名字叫启动另一个进程中的Activity,觉得这样才有逼格。因为每个App都会运行在自己的虚拟机中,每个虚拟机跑在一个进程中。但仔细一想,能够称为一个进程,前提是这个App必须要运行起来才行。而Android提供的能力,是不需要另一个App启动就可以将其特定的Activity启动起来的。
我们有至少两种办法达到启动另一个App中的Activity,
第一种用action启动,详情见我之前的文章《启动自己另一个程序的activity》。
第二种用intent设置className或component的办法启动。
举例如下。新建两个项目ProjectA和ProjectB,用B中的MainActivity启动A的MainActivitity。关键代码如下:
ProjectBMainActivity
publicvoidOnStartActivityClicked(Viewview){
Intentintent=newIntent(Intent.ACTION_VIEW);
StringpackageName="com.lazytech.projecta";
StringclassName="com.lazytech.projecta.MainActivity";
intent.setClassName(packageName,className);
//secondmethod
//intent.setComponent(newComponentName(
//"com.lazytech.projecta",
//"com.lazytech.projecta.MainActivity"
//));
Bundlebundle=newBundle();
bundle.putString("msg","thismessageisfromprojectB");
intent.putExtras(bundle);
intent.putExtra("pid",android.os.Process.myPid());
startActivityForResult(intent,1);
//startActivity(intent);
@Override
protectedvoidonActivityResult(intrequestCode,intresultCode,Intentdata){
super.onActivityResult(requestCode,resultCode,data);
switch(requestCode){
case1:
if(resultCode==RESULT_OK){
textView.setText(data.getStringExtra("result"));
}
break;
}
}
ProjectAMainActivity
@Override
protectedvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView=(TextView)findViewById(R.id.text);
Intentintent=getIntent();
if(intent!=null){
textView.setText(intent.getStringExtra("msg"));
}
}
publicvoidOnSendResult(Viewview){
Intentintent=newIntent();
intent.putExtra("result","OK!fromprojecta.");
this.setResult(RESULT_OK,intent);
this.finish();
}
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!