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。关键代码如下:

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

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

(0)

相关推荐

  • android的activity跳转到另一个activity

    开发环境:android4.1.1 实验功能:在第一个Hello World!为标签的activity中显示good,该界面中有一个名为Next的按钮.点击Next按钮进入到第二个activity中去,第二个界面中只有1个Close按钮.当然,据网上有人将要比较安全的实现关闭程序的功能也不是挺简单的,因为android有专门的退出键返回键等.所以该Close按钮暂时没去实现它.我的第1个activity为HelloworldActivity,第2个activity为NextActivity. 实

  • Android中fragment与activity之间的交互(两种实现方式)

    (未给Fragment的布局设置BackGound) 之前关于Android中Fragment的概念以及创建方式,我专门写了一篇博文<详解Android中Fragment的两种创建方式>,就如何创建Fragment混合布局做了详细的分析,今天就来详细说道说道Fragment与宿主Activity之间是如何实现数据交互的. 我们可以这样理解,宿主Activity中的Fragment之间要实现信息交互,就必须通过宿主Activity,Fragment之间是不可能直接实现信息交互的. Fragmen

  • Android的Activity跳转动画各种效果整理

    大家使用Android的原生UI都知道,Android的Activity跳转就是很生硬的切换界面.其实Android的Activity跳转可以设置各种动画.下面给大家看看效果:  实现非常简单,用overridePendingtransition(int inId, int outId)即可实现.inId是下一界面进入效果的xml文件的id,outId是当前界面退出效果的xml文件id. 效果是用xml文件写的,首先要在res文件夹下建立anim文件夹,然后把动画效果xml文件放到里面去. 下面

  • Android基础之Fragment与Activity交互详解

    今天继续讲解Fragment组件的特性,主要是跟Activity的交互和生命周期的关系,我们前面已经说过Fragment是依赖于Activity的,而且生命周期也跟Activity绑定一起.下面我们看看Fragment跟Activity的关系. 1.为Activity创建事件回调方法在一些情况下, 你可能需要一个fragment与activity分享事件. 一个好的方法是在fragment中定义一个回调的interface, 并要求宿主activity实现它.当activity通过interfa

  • Android Activity 与Service进行数据交互详解

    ①从设计的角度来讲: Android的Activity的设计与Web页面非常类似,从页面的跳转通过连接,以及从页面的定位通过URL,从每个页面的独立封装等方面都可以看出来,它主要负责与用户进行交互. Service则是在后台运行,默默地为用户提供功能,进行调度和统筹.如果一棵树的地上部分是Activity的话,它庞大的根须就是Service.Android的服务组件没有运行在独立的进程或线程中,它和其他的组件一样也在应用的主线程中运行,如果服务组件执行比较耗时的操作就会导致主线程阻塞或者假死,从

  • 浅谈Android Activity与Service的交互方式

    实现更新下载进度的功能 1. 通过广播交互 Server端将目前的下载进度,通过广播的方式发送出来,Client端注册此广播的监听器,当获取到该广播后,将广播中当前的下载进度解析出来并更新到界面上. 优缺点分析: 通过广播的方式实现Activity与Service的交互操作简单且容易实现,可以胜任简单级的应用.但缺点也十分明显,发送广播受到系统制约.系统会优先发送系统级广播,在某些特定的情况下,我们自定义的广播可能会延迟.同时在广播接收器中不能处理长耗时操作,否则系统会出现ANR即应用程序无响应

  • Android使用Messenger实现service与activity交互

    service与activity交互的方式有多种,这里说说使用Messenger来实现两者之间的交互. Service程序: public class MessengerService extends Service { final Messenger mMessenger = new Messenger(new IncomingHandler()); @Override public IBinder onBind(Intent intent) { return mMessenger.getBi

  • Android 中启动自己另一个程序的activity如何实现

    Android 中启动自己另一个程序的activity如何实现 可以使用action,举例: 1. 比如建立activity4,我们对它的AndroidManifest.xml修改一下  <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:<a href="http://lib.csdn.net/base/android" rel="external no

  • Android编程实现在Activity中操作刷新另外一个Activity数据列表的方法

    本文实例讲述了Android编程实现在Activity中操作刷新另外一个Activity数据列表的方法.分享给大家供大家参考,具体如下: 做Android项目中遇到这样一个问题:有两个acticity,一个显示好友列表,另外一个显示会话列表,现在问题是在会话界面增加一个添加好友功能,添加好友后要求实时的刷新好友列表. 想了想,找了两种方式 方法一:通过声明要刷新的activity(FriendActivity)为静态变量,然后在一个activity(SessionActivity)中直接调用刷新

  • android显示意图激活另一个Activity的方法

    android跳转到另一个界面,是app常用的操作.我们可以跳转到该应用本身的界面,亦可以跳转到系统的应用界面. 效果: 打开软件: 跳转到第二个界面: 跳转到系统应用的界面: 附代码如下: 主界面代码: package com.yy.twoactivity; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.View; public

  • Android Activity之间传递图片(Bitmap)的方法

    在Android开发中:Activity之间传递参数是常见的事:如果我们要在Activity之间传递图片:1.MainActivity中包括一个ImageView:当我们点击ImageView时:把图片传递给另外一个Activity MainActivity的主要代码: 复制代码 代码如下: Intent intent=new Intent(MainActivity.this,TranActivity.class);            intent.putExtra("bitmap"

随机推荐