Unity版本2018.1.9
安装APK
所需权限:
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.INTERNET" />
含有FileProvider指定APK路径。未使用。仅用了永久路径 Application.persistentDataPath
Unity函数
using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using UnityEngine;
public class Test : MonoBehaviour
{
AndroidJavaClass javaClass;
private void Start()
{
//我的包名是com.pico.Integration
//一个ThirdActivity.java类(无继承)
javaClass = new AndroidJavaClass("com.pico.Integration.ThirdActivity");
}
private void OnGUI()
{
if (GUI.Button(new Rect(330, 330, 100, 100), "InstallAPK"))
{
//保存位置在手机内存+Android/data/+包名+/files
string path = Application.persistentDataPath + "/a.apk";
//调用java工程里的函数
bool b = javaClass.CallStatic<bool>("installAPK", path);
}
//if (GUI.Button(new Rect(330, 730, 100, 100), "Restart"))
//{
// Restart(1);
//}
}
}
Java脚本
public static boolean installAPK(String apkPath) {
File apkFile = new File(apkPath);
if (apkFile.exists()) {
Intent intent = new Intent(Intent.ACTION_VIEW);
if (Build.VERSION.SDK_INT >= 24) {
intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
Uri contentUri = FileProvider.getUriForFile(UnityPlayer.currentActivity, UnityPlayer.currentActivity.getPackageName()+".fileprovider", apkFile);
intent.setDataAndType(contentUri, "application/vnd.android.package-archive");
} else {
intent.setDataAndType(Uri.fromFile(apkFile), "application/vnd.android.package-archive");
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
}
// if (UnityPlayer.currentActivity.getPackageManager().queryIntentActivities(intent, 0).size() > 0) {
UnityPlayer.currentActivity.startActivity(intent);
// }
return true;
} else {
return false;
}
}
Android版本7.0测试成功。弹出安装界面。8.0以后使用FileProvider配合xml文件
重启APP
//Unity函数
public static void Restart(int delay)
{
AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
AndroidJavaObject mainActivity = jc.GetStatic<AndroidJavaObject>("currentActivity");
mainActivity.Call("doRestart", delay);
jc.Dispose();
mainActivity.Dispose();
}
下载地址:https://download.csdn.net/download/linzhonglong/11453359
如有需要:邮箱qikulin@163.com