Android 在app里面打开另一个app

一、方式1:打开外部app,在新窗口打开。

    //打开外部app,新窗口打开private void doStartApplicationWithPackageName(String packagename) {// 通过包名获取此APP详细信息,包括Activities、services、versioncode、name等等PackageInfo packageinfo = null;try {packageinfo = getPackageManager().getPackageInfo(packagename, 0);} catch (PackageManager.NameNotFoundException e) {e.printStackTrace();}if (packageinfo == null) {//BDToast.showToast(getText(R.string.app_not_found).toString());Toast.makeText(getApplicationContext(), "app_not_found", Toast.LENGTH_SHORT).show();return;}elseToast.makeText(getApplicationContext(), "open successfully", Toast.LENGTH_SHORT).show();Intent resolveIntent = getPackageManager().getLaunchIntentForPackage(packagename);// 这里的packname就是从上面得到的目标apk的包名startActivity(resolveIntent);// 启动目标应用}

二、方式2:打开外部app,嵌入旧窗口中。

//打开外部app,嵌入旧窗口中private void doStartApplicationWithPackageNameE(String packagename) {// 通过包名获取此APP详细信息,包括Activities、services、versioncode、name等等PackageInfo packageinfo = null;try {packageinfo = getPackageManager().getPackageInfo(packagename, 0);} catch (PackageManager.NameNotFoundException e) {e.printStackTrace();}if (packageinfo == null) {Toast.makeText(getApplicationContext(), "app_not_found", Toast.LENGTH_SHORT).show();return;} elseToast.makeText(getApplicationContext(), "open successfully", Toast.LENGTH_SHORT).show();// 创建一个类别为CATEGORY_LAUNCHER的该包名的IntentIntent resolveIntent = new Intent(Intent.ACTION_MAIN, null);resolveIntent.addCategory(Intent.CATEGORY_LAUNCHER);resolveIntent.setPackage(packageinfo.packageName);// 通过getPackageManager()的queryIntentActivities方法遍历
List<ResolveInfo> resolveinfoList = getPackageManager().queryIntentActivities(resolveIntent, 0);ResolveInfo resolveinfo = resolveinfoList.iterator().next();if (resolveinfo != null) {// packagename = 参数packnameString packageName = resolveinfo.activityInfo.packageName;// 这个就是我们要找的该APP的LAUNCHER的Activity[组织形式:packagename.mainActivityname]String className = resolveinfo.activityInfo.name;// LAUNCHER IntentIntent intent = new Intent(Intent.ACTION_MAIN);intent.addCategory(Intent.CATEGORY_LAUNCHER);// 设置ComponentName参数1:packagename参数2:MainActivity路径ComponentName cn = new ComponentName(packageName, className);intent.setComponent(cn);startActivity(intent);}}

三、测试

1、java源码

package com.example.lancher_demo;import android.content.ComponentName;
import android.content.Intent;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Toast;import java.util.List;public class MainActivity extends AppCompatActivity implements View.OnClickListener {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//findViewById(R.id.btn_custom_property).setOnClickListener(this);findViewById(R.id.btn_StartApplication).setOnClickListener(this);}//打开外部app,嵌入旧窗口中private void doStartApplicationWithPackageNameE(String packagename) {// 通过包名获取此APP详细信息,包括Activities、services、versioncode、name等等PackageInfo packageinfo = null;try {packageinfo = getPackageManager().getPackageInfo(packagename, 0);} catch (PackageManager.NameNotFoundException e) {e.printStackTrace();}if (packageinfo == null) {Toast.makeText(getApplicationContext(), "app_not_found", Toast.LENGTH_SHORT).show();return;} elseToast.makeText(getApplicationContext(), "open successfully", Toast.LENGTH_SHORT).show();// 创建一个类别为CATEGORY_LAUNCHER的该包名的IntentIntent resolveIntent = new Intent(Intent.ACTION_MAIN, null);resolveIntent.addCategory(Intent.CATEGORY_LAUNCHER);resolveIntent.setPackage(packageinfo.packageName);// 通过getPackageManager()的queryIntentActivities方法遍历List<ResolveInfo> resolveinfoList = getPackageManager().queryIntentActivities(resolveIntent, 0);ResolveInfo resolveinfo = resolveinfoList.iterator().next();if (resolveinfo != null) {// packagename = 参数packnameString packageName = resolveinfo.activityInfo.packageName;// 这个就是我们要找的该APP的LAUNCHER的Activity[组织形式:packagename.mainActivityname]String className = resolveinfo.activityInfo.name;// LAUNCHER IntentIntent intent = new Intent(Intent.ACTION_MAIN);intent.addCategory(Intent.CATEGORY_LAUNCHER);// 设置ComponentName参数1:packagename参数2:MainActivity路径ComponentName cn = new ComponentName(packageName, className);intent.setComponent(cn);startActivity(intent);}}//打开外部app,新窗口打开private void doStartApplicationWithPackageName(String packagename) {// 通过包名获取此APP详细信息,包括Activities、services、versioncode、name等等PackageInfo packageinfo = null;try {packageinfo = getPackageManager().getPackageInfo(packagename, 0);} catch (PackageManager.NameNotFoundException e) {e.printStackTrace();}if (packageinfo == null) {//BDToast.showToast(getText(R.string.app_not_found).toString());Toast.makeText(getApplicationContext(), "app_not_found", Toast.LENGTH_SHORT).show();return;}elseToast.makeText(getApplicationContext(), "open successfully", Toast.LENGTH_SHORT).show();Intent resolveIntent = getPackageManager().getLaunchIntentForPackage(packagename);// 这里的packname就是从上面得到的目标apk的包名startActivity(resolveIntent);// 启动目标应用}@Overridepublic void onClick(View view) {if (view.getId() == R.id.btn_custom_property) {//doStartApplicationWithPackageName("com.android.calculator2");doStartApplicationWithPackageNameE("com.google.android.deskclock");}else if (view.getId() == R.id.btn_StartApplication) {doStartApplicationWithPackageName("com.android.calculator2");}}
}

2、加<uses-permission android:name="android.permission.QUERY_ALL_PACKAGES"

3、测试运行效果

Android 在app里面打开另一个app,加<uses-permission android:name=“android.permission.QUERY_ALL_PACKAGES“相关推荐

  1. android点击另一个app,Android 怎么从一个APP中打开另外一个APP

    Android 如何从一个APP中打开另外一个APP 众所周知,在一个APP内部,从一个页面跳转到另外一个页面是使用startactivity函数来实现的. 同样的,对于应用之间的跳转也是如此的.应用 ...

  2. android 打开其它app,Android 在一个APP里打开另一个APP

    前言 不知道你们有没有注意过,每次打开一些软件的时候都会有广告引导页,有时候手滑点到了,会有进入手机上的另一个APP,这有没有引起你的注意呢? 运行效果图 正文 为了测试这个功能,首先要创建两个项目, ...

  3. Android在app中打开另一个app

    打开另一个app 知道包名和MainActivity类名之后 Intent intent = new Intent(Intent.ACTION_MAIN); intent.addCategory(In ...

  4. android程序中实现打开另一个app

    1.已知要打开的apk的包名 String packetName = "com.onedollar.smartnurse"; Intent intent = getActivity ...

  5. android app传递参数,Android APP调起另外一个APP并传值

    概述 为了增加用户体验,可能要求在一个APP中打开另外一个APP的需求,一般分为三种: 显式调用跳转 隐式调用跳转 URL Scheme跳转 代码 用到的一些公共方法,当打开APP时,检测到第三方AP ...

  6. android github 多页面程序,论一个APP从启动到主页面显示经历的过程?

    前言 (个人观点.不喜勿喷) 本部分内容是关于Android进阶的一些知识总结,涉及到的知识点比较杂,不过都 是面试中几乎常问的知识点,也是加分的点. 关于这部分内容,可能需要有一些具体的项目实践.在 ...

  7. Android App拉起另一个App

    Android 运维技巧 系列目录 系统App 签名JKS制作及静默安装 App拉起另一个App Android 开机动画的制作 App拉起另一个App 前言 分析及效果图 App拉起方式 拉起流程 ...

  8. 安卓开发由一个APP拉起另一个APP的方法总结

    安卓开发由一个APP拉起另一个APP的方法总结 最近公司在对接第三方应用的时候有两个需求:1.要由我们的客户端拉起第三方的客户端,并且传值.2.要让第三方客户端能够拉起我们的客户端,并可以根据传递过来 ...

  9. 自己怎么开发一个软件app、如何开发一个app系统软件?

    自己怎么开发一个软件app.如何开发一个app系统软件? ​华盛恒辉开发app软件的办法如下: 1.华盛恒辉首先本人明白需求,懂代码,熟习开发流程. 2.华盛恒辉APP开发后期需求理解产品定位. 3. ...

最新文章

  1. CentOS下安装ZooKeeper
  2. 读取MySQL初始化配置_MySQL 初始化配置
  3. LeetCode算法题4:二分查找及扩展应用
  4. wxWidgets:wxFileName类用法
  5. 【监控】Grafana面板修改记录
  6. Win2008 R2 IIS FTP防火墙的配置
  7. 【codevs1690】开关灯,线段树练习
  8. Self-Supervised Curriculum Learning for Spelling Error Correction
  9. BGP Flow Specification原理
  10. c语言经典题(期中/期末复习)(xdoj)
  11. 汽车UDS诊断之控制诊断故障码设置服务(0x85)深度剖析
  12. DTAS 尺寸工程分析-尺寸公差分析软件尺寸链计算
  13. spring 演变_团队的演变
  14. 字符数组的定义和初始化
  15. Linux-凝思6.0.80磐石网络配置-亲测过
  16. C#Winform中picturebox控件加载图片后无法释放
  17. 遇到oracle错误1445,sql附加数据库失败
  18. 黑金AX7020 PYNQ入门
  19. FL Studio最新20.9中文版DJ电子音乐制作神器
  20. 几种光纤接口(ST,SC,LC,FC)

热门文章

  1. 3w字 长文干货!100 道 Linux 常见面试题
  2. 蓝鲸社区版单机、多机部署踩坑分享
  3. Windows Git Bash 无法运行python解决方法
  4. 使用容联云通讯实现电话云呼叫功能
  5. Integer源码详解
  6. 买加智能销售系统-以科技赋能企业销售
  7. jsp运行linux脚本,jsp页面调用哪个Linux的shell 脚本步骤
  8. 读取文件路径中的图片
  9. 申宝正规股票煤炭股超跌反弹
  10. 【51单片机】串口通信