Android实战技术:启动另一个App/apk中的Activity

news/2024/11/9 20:10:12

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;
        }
    }

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();
    }

转载地址:http://blog.csdn.net/lincyang/article/details/45503675




http://www.niftyadmin.cn/n/3649191.html

相关文章

Android studio的安装和配置

1.下载:到 https://developer.android.com/sdk/index.html 去下载Android Stuido 2.安装步骤1、2、 红色箭头依次说明: Android Studio: 强制选项,为IDE工具部分_ Android SDK: 可选选项,为SDK工具包部分_ Android Virtual De…

nestjs_NestJS入门

nestjs介绍 (Introduction) If you’ve worked on a Node.js application, you may have noticed that it became more difficult to maintain over time. The more you add new features to the application, the larger the codebase becomes. 如果您使用的是Node.js应用程序…

Django 上传文件出现 OSError Permission denied的解决办法

我的服务器在Ubuntu上,使用了ApacheNginx做App Server,DjangoPython开发,今天上传文件时候出现了OSError的错误,具体原因为Permission denied 一看发现是因为上传文件的文件夹可能没有被赋予www-data用户(Apache和Ngi…

[收藏]你就不是我们所需要的那种层次的领导

引用自:21世纪领导者的挑战-多样性(http://www.mindmeters.com/blogind.asp?id4)看了《Ready to Leader》,一个领导力故事。山姆(故事中的公司董事长,领导力典范)说,“如果你想改变这个世界&am…

使用Android系统自带的下拉刷新控件

首先布局: <?xml version"1.0" encoding"utf-8"?> <android.support.v4.widget.SwipeRefreshLayout xmlns:android"http://schemas.android.com/apk/res/android"xmlns:app"http://schemas.android.com/apk/res-auto"andro…

Django Admin Site (v1.4) 的Nginx配置

本人写本文是因为发现在使用NginxApache搭建完Django站点后&#xff0c;admin site显示的很丑陋。查看源码后发现&#xff0c;admin的css、js和图片都无法正常显示 baidu了一些资料&#xff0c;操作下来也不成功&#xff0c;可能是Django的版本更新的关系。所以自己写一下配置…

AIX 程序设计大赛---AIX正方形问题

AIX 程序设计大赛---AIX正方形问题作者&#xff1a;成晓旭作为“算法及实现”栏目的“抛砖引玉”之作&#xff0c;将自己2年多前实现的一个算法放出来。有一年IBM出了这个Java程序设计竞赛题&#xff0c;当时&#xff0c;自己花晚上时间用Java实现了。[问题描述]:任意给定一个正…

bootstrap4侧边栏_如何使用纯CSS和Bootstrap 4构建多个堆叠式粘性侧边栏

bootstrap4侧边栏In this tutorial you’ll work on building multiple sticky sidebars that stack without using any JavaScript. 在本教程中&#xff0c;您将构建无需使用任何JavaScript即可堆叠的多个粘性侧栏。 We’ll discuss: 我们将讨论&#xff1a; Multiple Stack…