打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
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。关键代码如下:
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;        }    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

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();    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
我的第一个 Mono for Android 应用
WebView的用法
android使用全局变量的两种方法
Android声明和使用权限
两个android程序间的相互调用(apk互调)
! android应用——装逼神器《微博尾》
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服