unity 发布apk,在应用内下载安装apk(用于更大大版本)

*注意事项:

  •   1,andriod 7.0 和 android 8.0是安卓系统的分水岭,需要分开来去实现相关内容2,注意自己的包名,在设置一些共享文件的时候需要放自己的包名3,以下是直接用arr包放入unity中直接使用的,不需要导入unity的class.jar包
    

步骤:
准备工作:
1.在main的文件下面新建一个file_paths.xml文件
代码:

<?xml version="1.0" encoding="utf-8"?>
<resources><paths><!--external-path: 该方式提供在外部存储区域根目录下的文件。它对应Environment.getExternalStorageDirectory返回的路径external-files-path: Context.getExternalFilesDir(null)external-cache-path: Context.getExternalCacheDir(String)--><external-path name="download" path="" /></paths></resources>

2.在AndrioManifest.xml的中添加一下代码

       <providerandroid:name="androidx.core.content.FileProvider"android:authorities= "你的包名"android:exported="false"android:grantUriPermissions="true"><meta-dataandroid:name="android.support.FILE_PROVIDER_PATHS"android:resource="@xml/file_paths" /></provider>

案例代码如下:
在这里插入图片描述
3.在unity的plungs的android下面的andriodManifest.xml里新增一句,开启安装的权限

<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES"/>

案例如下
在这里插入图片描述
最终是最重要代码,在androidstudio里面新增一个安装的类InstallUtil,同时解决android 8.0和 android 7.0问题代码如下

package com.gomore.pigfarm.util;import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.net.Uri;
import android.os.Build;
import android.provider.Settings;
import android.util.Log;import androidx.annotation.RequiresApi;
import androidx.core.content.FileProvider;import java.io.File;public class InstallUtil {private static final int UNKNOWN_CODE = 2020;//外部调用public static void installApk(Context context, String path) {//8.0及以上if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {//  unityActivity.showToast("8");startInstallO(context, path);//7.0及以上} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {//unityActivity.showToast("7");startInstallN(context, path);//7.0 以下} else {startInstall(context, path);}}/*** android1.x-6.x** @param path 文件的路径*/public static void startInstall(Context context, String path) {Intent install = new Intent(Intent.ACTION_VIEW);install.setDataAndType(Uri.parse("file://" + path), "application/vnd.android.package-archive");install.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);context.startActivity(install);}/*** android7.x** @param path 文件路径*/@RequiresApi(api = Build.VERSION_CODES.N)public static void startInstallN(Context context, String path) {String authority = "填自己的包名";try {// unityActivity.showToast("进入组装安装7");//参数1 上下文, 参数2 在AndroidManifest中的android:authorities值, 参数3 共享的文件Uri apkUri = FileProvider.getUriForFile(context, authority, new File(path));Intent install = new Intent(Intent.ACTION_VIEW);//由于没有在Activity环境下启动Activity,设置下面的标签install.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);//添加这一句表示对目标应用临时授权该Uri所代表的文件install.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);install.setDataAndType(apkUri, "application/vnd.android.package-archive");context.startActivity(install);} catch (Exception e) {e.printStackTrace();Log.d("S","startInstallN: " + e.getMessage());}}//private static final String TAG = "InstallUtil";/*** android8.x*/@RequiresApi(api = Build.VERSION_CODES.O)private static void startInstallO(final Context context, String path) {boolean isGranted = context.getPackageManager().canRequestPackageInstalls();if (isGranted) {startInstallN(context, path);//安装应用的逻辑(写自己的就可以)// unityActivity.showToast("开始安装应用8");}else {//  unityActivity.showToast("开始安装应用未授权");new AlertDialog.Builder(context).setCancelable(false).setTitle("安装应用需要打开未知来源权限,请去设置中开启权限").setPositiveButton("确定", new DialogInterface.OnClickListener() {public void onClick(DialogInterface d, int w) {// unityActivity.showToast("安装8");Intent intent = new Intent(Settings.ACTION_MANAGE_UNKNOWN_APP_SOURCES);Activity act = (Activity) context;act.startActivityForResult(intent, UNKNOWN_CODE);}}).show();}}
}

最后打包运行可以安装,不懂的可留言哈

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/92477.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

阿桂天山的技术小结:Flask+UEditor实现图片文件上传富文本编辑

话不多说,有图有源码 先看效果: 1.前端html页面index.html <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><script src"{{ url_for(static,filenameueditor/ueditor.config.js) }}"></script…

一篇文章帮你拯救70%的购物车放弃率

想象一下&#xff0c;您倾注所有的心血到您的在线业务中&#xff0c;却面临着令人痛苦的购物车放弃率。这可能会让你痛苦不堪&#xff0c;错失了销售和收入的机会。 此外&#xff0c;你忠实的顾客可能会叛逃去使用竞争对手的产品&#xff0c;雪上加霜。通过再次在广告上支付客…

介绍一下我们的开源“充电之旅” - 两位新晋 Apache Flink Committer 专访

本文出自字节跳动流式计算团队的方勇、胡伟华同学专访。两位同学在 Apache Flink 社区主要贡献了包括 Runtime Coordinator、Streaming Warehouse 等相关 Feature。于2023年7月正式受邀成为 Apache Flink Committer。 在软件开发的世界中&#xff0c;开源已成为普遍关注的话题。…

Vite打包性能优化及填坑

最近在使用 Vite4.0 构建一个中型前端项目的过程中&#xff0c;遇到了一些坑&#xff0c;也做了一些项目在构建生产环境时的优化&#xff0c;在这里做一个记录&#xff0c;以便后期查阅。(完整配置在后面) 上面是dist文件夹的截图&#xff0c;里面的内容已经有30mb了&#xff…

E8267D 是德科技矢量信号发生器

描述 最先进的微波信号发生器 安捷伦E8267D PSG矢量信号发生器是业界首款集成式微波矢量信号发生器&#xff0c;I/Q调制最高可达44 GHz&#xff0c;典型输出功率为23 dBm&#xff0c;最高可达20 GHz&#xff0c;对于10 GHz信号&#xff0c;10 kHz偏移时的相位噪声为-120 dBc/…

QWidget的ui界面绘制成图片

文章目录 源文件源码解释效果修复图片清晰度 源文件 #include "widget.h" #include "ui_widget.h"#include <QPixmap> #include <QDir>Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this);// 构造…

神经网络与卷积神经网络

全连接神经网络 概念及应用场景 全连接神经网络是一种深度学习模型&#xff0c;也被称为多层感知机&#xff08;MLP&#xff09;。它由多个神经元组成的层级结构&#xff0c;每个神经元都与前一层的所有神经元相连&#xff0c;它们之间的连接权重是可训练的。每个神经元都计算…

cobbler自动化安装CentOS、windows和ubuntu

环境介绍 同时玩cobbler3.3和cobbler2.8.5 cobbler3.3 系统CentOS8.3 VMware虚拟机 桥接到物理网络 IP: 192.168.1.33 cobbler2.8.5 系统CentOS7.9 VMWare虚拟机 桥接到物理网络 IP&#xff1a;192.168.1.33 安装cobbler3.3 yum源修改 cat /etc/yum.repo.d/Cento…

如何通过内网穿透实现外部网络对Spring Boot服务端接口的HTTP监听和调试?

文章目录 前言1. 本地环境搭建1.1 环境参数1.2 搭建springboot服务项目 2. 内网穿透2.1 安装配置cpolar内网穿透2.1.1 windows系统2.1.2 linux系统 2.2 创建隧道映射本地端口2.3 测试公网地址 3. 固定公网地址3.1 保留一个二级子域名3.2 配置二级子域名3.2 测试使用固定公网地址…

一篇文章带你了解-selenium工作原理详解

前言 Selenium是一个用于Web应用程序自动化测试工具。Selenium测试直接运行在浏览器中&#xff0c;就像真正的用户在操作一样。支持的浏览器包括IE&#xff08;7, 8, 9, 10, 11&#xff09;&#xff0c;Mozilla Firefox&#xff0c;Safari&#xff0c;Google Chrome&#xff0c…

Spring Security存在认证绕过漏洞 CVE-2021-22096

文章目录 0.前言1.参考文档2.基础介绍漏洞影响范围&#xff1a;官方说明&#xff1a;修复版本&#xff1a;漏洞利用步骤&#xff1a;修复方式&#xff1a; 3.解决方案 0.前言 背景&#xff1a;项目被扫到Spring Boot 的漏洞&#xff0c;严格的说应该是Spring Security 组件的漏…

FPGA时序分析与约束(1)——组合电路时序

写在最前面&#xff1a; 关于时序分析和约束的学习似乎是学习FPGA的一道分水岭&#xff0c;似乎只有理解了时序约束才能算是真正入门了FPGA&#xff0c;对于FPGA从业者或者未来想要从事FPGA开发的工程师来说&#xff0c;时序约束可以说是一道躲不过去的坎&#xff0c;所以从这篇…