Android实战技巧之二十八:启动另一个App/apk中的Activity
2015-05-05 15:56
447 查看
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
ProjectA MainActivity
本来想把本文的名字叫启动另一个进程中的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(); }
相关文章推荐
- Android实战技术:启动另一个App/apk中的Activity
- Android 启动另一个App/apk中的Activity实现代码
- android 启动另一个app中的activity和service
- Android项目实战(二十二):启动另一个APP or 重启本APP
- Android Studio App启动另一个activity
- Android中一个app启动另一个app的指定activity
- 启动另一个App/apk中的Activity(A应用打开B应用)
- android 一个apk启动另一个apk的activity
- 【android学习】一个APK的Activity启动另一个APK的Activity
- Android问题集锦之二十八:You need to use a Theme.AppCompat theme (or descendant) with this activity.
- 安卓入门 使用android创建一个项目 从启动activity中响应按钮事件 启动另一个activity 并传递参数
- Android性能优化实战(一)----App启动时间优化
- Android 一个app启动另一个app
- Android在一个应用中启动另一个应用的Activity时失败的解决办法
- Android在一个APP中通过包名或类名启动另一个APP
- 新 Android在一个APP中通过包名或类名启动另一个APP
- Android在一个应用中启动另一个应用的Activity时失败的解决办法
- android--activity启动另一个activity 传参
- (转)Android开发——通过广播启动另一个应用的Activity
- Android通过APP启动另一个APP