我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Android如何在一个app中安装并卸载另一个app

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Android如何在一个app中安装并卸载另一个app

这篇文章主要介绍“Android如何在一个app中安装并卸载另一个app”,在日常操作中,相信很多人在Android如何在一个app中安装并卸载另一个app问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Android如何在一个app中安装并卸载另一个app”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

Android在一个app中安装并卸载另一个app

在app→class="lazy" data-src→main下新建文件夹asserts,将准备安装的apk文件放在asserts内

在app→class="lazy" data-src→main→res下新建文件夹xml,右击xml文件夹,选择new→XML Resource File,File name为文件名,可随意,本文中为filepaths;Root element为资源类型,输入paths,确定并编辑以下代码:

<?xml version="1.0" encoding="utf-8"?><paths xmlns:android="http://schemas.android.com/apk/res/android"> <external-path name="external_files" path="."/></paths>

编辑AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" package="com.example.myapplication"> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> <application  android:allowBackup="true"  android:icon="@mipmap/ic_launcher"  android:label="@string/app_name"  android:roundIcon="@mipmap/ic_launcher_round"  android:supportsRtl="true"  android:requestLegacyExternalStorage="true"  android:theme="@style/Theme.MyApplication">  <provider   android:name="androidx.core.content.FileProvider"   android:authorities="包名"   android:exported="false"   android:grantUriPermissions="true">   <meta-data   android:name="android.support.FILE_PROVIDER_PATHS"    android:resource="@xml/filepaths步骤2中的文件"    />  </provider>  <activity android:name=".MainActivity">   <intent-filter>    <action android:name="android.intent.action.MAIN" />    <category android:name="android.intent.category.LAUNCHER" />   </intent-filter>  </activity> </application></manifest>

MainActivity.java

public class MainActivity extends AppCompatActivity { Context mContext; private Button bt,bt0; private TextView tx; public static boolean isGrantExternalRW(Activity activity) { //权限判定  if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && activity.checkSelfPermission(    Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {   activity.requestPermissions(new String[]{     Manifest.permission.READ_EXTERNAL_STORAGE,     Manifest.permission.WRITE_EXTERNAL_STORAGE   }, 1);   return false;  }  return true; } @Override protected void onCreate(Bundle savedInstanceState) {  super.onCreate(savedInstanceState);  setContentView(R.layout.activity_main);  mContext = this;  tx=findViewById(R.id.text);  bt=findViewById(R.id.button);//安装  bt0=findViewById(R.id.button0);//卸载//  Toast.makeText(this, ""+Environment.getExternalStorageDirectory().getAbsolutePath(), 0).show();  if(!this.isGrantExternalRW(MainActivity.this)){return;}//判断是否有权限修改,这很重要  else{  if(copyApkFromAssets(this, "app-debug.apk", Environment.getExternalStorageDirectory().getAbsolutePath()+"/app-debug.apk")){   bt.setOnClickListener(new View.OnClickListener() {    @Override    public void onClick(View v) {     new AlertDialog.Builder(mContext)       .setIcon(R.drawable.ic_launcher)       .setMessage("是否安装?")       .setPositiveButton("yes", new DialogInterface.OnClickListener() {        @Override        public void onClick(DialogInterface dialog, int which) {         Intent intent = new Intent(Intent.ACTION_VIEW);         intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);//         intent.setDataAndType(Uri.parse("file://" + Environment.getExternalStorageDirectory().getAbsolutePath()+"/app-debug.apk"),//           "application/vnd.android.package-archive");         File apkFile = new File(Environment.getExternalStorageDirectory()+"/app-debug.apk");         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {          intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);          Uri uri = FileProvider.getUriForFile(MainActivity.this, "com.example.myapplication", apkFile);          intent.setDataAndType(uri, "application/vnd.android.package-archive");         } else {          intent.setDataAndType(Uri.fromFile(apkFile), "application/vnd.android.package-archive");         }         mContext.startActivity(intent);        }       }).show();    }   });   bt0.setOnClickListener(new View.OnClickListener() {    @Override    public void onClick(View v) {     Uri packageURI = Uri.parse("package:com.example.a22");//package:+想要卸载的包名     Intent intent =new Intent(Intent.ACTION_DELETE);     intent.setData(packageURI);     mContext.startActivity(intent);    }   });  } }} public boolean copyApkFromAssets(Context context, String fileName, String path) { //将asserts中的apk文件复制到手机存储中 //可以从手机存储划到最下面,是单独的文件,没有设置文件夹  boolean copyIsFinish = false;  try {   InputStream is = context.getAssets().open(fileName);   File file = new File(path);   file.createNewFile();   FileOutputStream fos = new FileOutputStream(file);   int length = is.available();   byte[] temp = new byte[length];   int i = 0;   while ((i = is.read(temp)) > 0) {    fos.write(temp, 0, i);   }   fos.close();   is.close();   copyIsFinish = true;  } catch (IOException e) {   e.printStackTrace();  }  return copyIsFinish; }}

网络上的教程有很多自相矛盾,本人防止权限出错,把能加的权限都设置了一遍,有空可以选择测试一下,应该有的可以删掉

到此,关于“Android如何在一个app中安装并卸载另一个app”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Android如何在一个app中安装并卸载另一个app

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Android如何在一个app中安装并卸载另一个app

这篇文章主要介绍“Android如何在一个app中安装并卸载另一个app”,在日常操作中,相信很多人在Android如何在一个app中安装并卸载另一个app问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”And
2023-06-13

如何在Android开发中中实现一个App更新功能

如何在Android开发中中实现一个App更新功能?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。开发环境:AndroidStudio2.1.2+gradle-2.10部分代
2023-05-31

linux如何下载并安装一个rpm包

RPM(RPMPackageManager)是Linux软件包管理系统。下载RPM包可通过软件仓库或第三方仓库。安装方法包括使用yum/dnf或rpm命令。安装前需检查依赖关系。验证安装可通过检查软件包版本或运行测试程序。卸载RPM包会同时卸载其依赖项。最佳实践包括使用已知仓库、检查依赖关系、验证安装并定期更新软件包。
linux如何下载并安装一个rpm包
2024-04-02

如何在Linux上安装或卸载一个文件中列出的软件包

这篇文章主要讲解了“如何在Linux上安装或卸载一个文件中列出的软件包”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何在Linux上安装或卸载一个文件中列出的软件包”吧!在某些情况下,你可
2023-06-16

Android开发中如何实现在一个程序中启动另一个程序

Android开发中如何实现在一个程序中启动另一个程序?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。Android 开发有时需要在一个应用中启动另一个应用,比如
2023-05-31

如何在VMware上安装一个Android虚拟机

当一些app需要安卓系统进行测试时,而恰好手上只有苹果的时候,往往需要安装一个Android虚拟机 安装虚拟机 常见的虚拟机有VirtualBox、VMware、Mircrosoft Virtual PC等,下面以VMware为例。在VMw
2023-08-16

如何在Android中利用Recyclerview实现一个上拉加载功能

如何在Android中利用Recyclerview实现一个上拉加载功能?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。在项目中使用列表的下拉刷新和上拉加载更多是很常见的功能,下拉
2023-05-31

Android中如何在安卓上开发一个微笑抓拍神器

这篇文章主要介绍“Android中如何在安卓上开发一个微笑抓拍神器”,在日常操作中,相信很多人在Android中如何在安卓上开发一个微笑抓拍神器问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Android中如
2023-06-04

如何在Android应用中利用ADT实现一个离线下载功能

今天就跟大家聊聊有关如何在Android应用中利用ADT实现一个离线下载功能,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。Android ADT 离线下载操作步骤可以利用在线安装地址
2023-05-31

linux如何获得已经安装在系统中一个特殊包的信息

本文介绍了在Linux系统中获取已安装软件包信息的多种方法。使用dpkg打包管理器(Debian/Ubuntu)或rpm打包管理器(RedHat/CentOS),您可以查询已安装的包、查看详细信息、检查状态,并使用yum、apt-get或pacman等工具进行其他管理操作。确保正确配置打包管理器并在必要时以root权限运行命令。
linux如何获得已经安装在系统中一个特殊包的信息
2024-04-02

PHP如何查找字符串在另一个字符串中最后一次出现的位置,并返回从该位置到字符串结尾的所有字符

本篇文章介绍了PHP中查找字符串最后一次出现的位置的方法,并获取从该位置到字符串结尾的所有字符。使用strrpos()函数确定最后出现的位置,然后用substr()函数获取后续字符。示例代码展示了如何使用这些函数查找并获取子字符串。其他注意事项包括offset参数、空子字符串和子字符串长度超过主字符串的情况。
PHP如何查找字符串在另一个字符串中最后一次出现的位置,并返回从该位置到字符串结尾的所有字符
2024-04-02

Python如何查找字符串在另一个字符串中最后一次出现的位置,并返回从该位置到字符串结尾的所有字符

Python中,可以使用rfind()方法查找字符串在另一个字符串中最后一次出现的位置。要提取从最后出现位置到字符串结尾的字符,使用substringing操作即可。此外,还有in操作符、正则表达式和第三方库等其他方法可供选择。选择哪种方法取决于具体情况的效率和功能需求。
Python如何查找字符串在另一个字符串中最后一次出现的位置,并返回从该位置到字符串结尾的所有字符
2024-04-02

Java如何查找字符串在另一个字符串中最后一次出现的位置,并返回从该位置到字符串结尾的所有字符

本文介绍了在Java中查找字符串在另一个字符串中最后一次出现的位置,并返回从该位置到字符串结尾的所有字符的方法。通过使用lastIndexOf()方法和substrin()方法,可以轻松实现此功能。此外,还提供了替代方法,使用正则表达式来查找字符串的最后一次出现。
Java如何查找字符串在另一个字符串中最后一次出现的位置,并返回从该位置到字符串结尾的所有字符
2024-04-02

Go语言如何查找字符串在另一个字符串中最后一次出现的位置,并返回从该位置到字符串结尾的所有字符

在Go中查找字符串最后一次出现的索引并返回剩余内容。使用strings.LastIndex查找索引,然后通过strings.substr提取剩余内容。其他方法包括正则表达式和循环。代码示例说明了strings.LastIndex和strings.substr的用法。
Go语言如何查找字符串在另一个字符串中最后一次出现的位置,并返回从该位置到字符串结尾的所有字符
2024-04-02

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录