欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android 启动另一个App/apk中的Activity实现代码

程序员文章站 2023-11-13 13:03:28
android 启动另一个app/apk中的activity实现代码 前言: android提供了在一个app中启动另一个app中的activity的能力,这使我们的程...

android 启动另一个app/apk中的activity实现代码

前言:

android提供了在一个app中启动另一个app中的activity的能力,这使我们的程序很容易就可以调用其他程序的功能,从而就丰富了我们app的功能。比如在微信中发送一个位置信息,对方可以点击这个位置信息启动腾讯地图并导航。这个场景在现实中作用很大,尤其是朋友在陌生的环境找不到对方时,这个功能简直就是救星。

本来想把本文的名字叫启动另一个进程中的activity,觉得这样才有逼格。因为每个app都会运行在自己的虚拟机中,每个虚拟机跑在一个进程中。但仔细一想,能够称为一个进程,前提是这个app必须要运行起来才行。而android提供的能力,是不需要另一个app启动就可以将其特定的activity启动起来的。

我们有至少两种办法达到启动另一个app中的activity,

第一种用action启动,详情见我之前的文章《》。

第二种用intent设置classname或component的办法启动

举例如下。新建两个项目projecta和projectb,用b中的mainactivity启动a的mainactivitity。关键代码如下:

projectb mainactivity

 public void onstartactivityclicked(view view) {
  intent intent = new intent(intent.action_view);

  string packagename = "com.lazytech.projecta";
  string classname = "com.lazytech.projecta.mainactivity";
  intent.setclassname(packagename, classname);

  //second method
//  intent.setcomponent(new componentname(
//    "com.lazytech.projecta",
//    "com.lazytech.projecta.mainactivity"
//  ));
  bundle bundle = new bundle();
  bundle.putstring("msg", "this message is from project b ");
  intent.putextras(bundle);

  intent.putextra("pid", android.os.process.mypid());

  startactivityforresult(intent, 1);
//  startactivity(intent);
 @override
 protected void onactivityresult(int requestcode, int resultcode, intent data) {
  super.onactivityresult(requestcode, resultcode, data);
  switch (requestcode) {
   case 1:
    if(resultcode == result_ok) {
     textview.settext(data.getstringextra("result"));
    }
    break;
  }
 }

projecta mainactivity

 @override
 protected void oncreate(bundle savedinstancestate) {
  super.oncreate(savedinstancestate);
  setcontentview(r.layout.activity_main);
  textview = (textview)findviewbyid(r.id.text);

  intent intent = getintent();
  if(intent != null) {
   textview.settext(intent.getstringextra("msg"));
  }
 }

 public void onsendresult(view view) {
  intent intent = new intent();
  intent.putextra("result","ok! from project a.");
  this.setresult(result_ok,intent);
  this.finish();
 }

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!