Unity(十五) 调用Android方法安装APK以及重启APP

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

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值