Android 在app里面打开另一个app,加<uses-permission android:name=“android.permission.QUERY_ALL_PACKAGES“
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“相关推荐
- android点击另一个app,Android 怎么从一个APP中打开另外一个APP
Android 如何从一个APP中打开另外一个APP 众所周知,在一个APP内部,从一个页面跳转到另外一个页面是使用startactivity函数来实现的. 同样的,对于应用之间的跳转也是如此的.应用 ...
- android 打开其它app,Android 在一个APP里打开另一个APP
前言 不知道你们有没有注意过,每次打开一些软件的时候都会有广告引导页,有时候手滑点到了,会有进入手机上的另一个APP,这有没有引起你的注意呢? 运行效果图 正文 为了测试这个功能,首先要创建两个项目, ...
- Android在app中打开另一个app
打开另一个app 知道包名和MainActivity类名之后 Intent intent = new Intent(Intent.ACTION_MAIN); intent.addCategory(In ...
- android程序中实现打开另一个app
1.已知要打开的apk的包名 String packetName = "com.onedollar.smartnurse"; Intent intent = getActivity ...
- android app传递参数,Android APP调起另外一个APP并传值
概述 为了增加用户体验,可能要求在一个APP中打开另外一个APP的需求,一般分为三种: 显式调用跳转 隐式调用跳转 URL Scheme跳转 代码 用到的一些公共方法,当打开APP时,检测到第三方AP ...
- android github 多页面程序,论一个APP从启动到主页面显示经历的过程?
前言 (个人观点.不喜勿喷) 本部分内容是关于Android进阶的一些知识总结,涉及到的知识点比较杂,不过都 是面试中几乎常问的知识点,也是加分的点. 关于这部分内容,可能需要有一些具体的项目实践.在 ...
- Android App拉起另一个App
Android 运维技巧 系列目录 系统App 签名JKS制作及静默安装 App拉起另一个App Android 开机动画的制作 App拉起另一个App 前言 分析及效果图 App拉起方式 拉起流程 ...
- 安卓开发由一个APP拉起另一个APP的方法总结
安卓开发由一个APP拉起另一个APP的方法总结 最近公司在对接第三方应用的时候有两个需求:1.要由我们的客户端拉起第三方的客户端,并且传值.2.要让第三方客户端能够拉起我们的客户端,并可以根据传递过来 ...
- 自己怎么开发一个软件app、如何开发一个app系统软件?
自己怎么开发一个软件app.如何开发一个app系统软件? 华盛恒辉开发app软件的办法如下: 1.华盛恒辉首先本人明白需求,懂代码,熟习开发流程. 2.华盛恒辉APP开发后期需求理解产品定位. 3. ...
最新文章
- CentOS下安装ZooKeeper
- 读取MySQL初始化配置_MySQL 初始化配置
- LeetCode算法题4:二分查找及扩展应用
- wxWidgets:wxFileName类用法
- 【监控】Grafana面板修改记录
- Win2008 R2 IIS FTP防火墙的配置
- 【codevs1690】开关灯,线段树练习
- Self-Supervised Curriculum Learning for Spelling Error Correction
- BGP Flow Specification原理
- c语言经典题(期中/期末复习)(xdoj)
- 汽车UDS诊断之控制诊断故障码设置服务(0x85)深度剖析
- DTAS 尺寸工程分析-尺寸公差分析软件尺寸链计算
- spring 演变_团队的演变
- 字符数组的定义和初始化
- Linux-凝思6.0.80磐石网络配置-亲测过
- C#Winform中picturebox控件加载图片后无法释放
- 遇到oracle错误1445,sql附加数据库失败
- 黑金AX7020 PYNQ入门
- FL Studio最新20.9中文版DJ电子音乐制作神器
- 几种光纤接口(ST,SC,LC,FC)