unity3d开发android小游戏版本版本更新后自动安装功能的实现

本文介绍如何在Unity3d中利用Android原生功能实现游戏版本的自动更新。通过在Android Studio中创建下载和安装更新的代码,然后打包成jar,导入Unity3d作为插件调用。文章详细讲解了Android端的代码实现,包括下载进度的传递到Unity3d以及在后台显示下载进度的方法,并提供了Unity3d中接收和显示进度的代码。最后,强调了导出jar包和配置AndroidManifest.xml的注意事项。
摘要由CSDN通过智能技术生成

     最近在学习android的知识,因为功能的需要,unity3d 要和android交互。最近公司的项目中遇到了unity3d 开发的app需要更新和自动安装的功能,但是使用unity3d是实现不了这样的功能的。这个时候就想到使用android原有的知识进行开发,然后打成jar包,导成插件,放到unity3d中去调用。

     1.首先在eclipse或者android studio 中开发原有的app下载更新的功能。

      *我这里是以eclipse为例开发的。

        首先在eclipse中导入unity3d的jar包,class.jar,这里的class.jar在unity3d安装目录下,如下:D:\Unity5.2.3SetUp\Editor\Data\PlaybackEngines\androidplayer\Variations\il2cpp\Development\Classes

然后就要写相应的代码了,android的原有下载更新网上也有很多但是没有结合Untiy3d。具体的代码如下,首先要引入import com.unity3d.player.UnityPlayer,然后activity继承UnityPlayerActivity 

package com.example.downapk;
import java.io.File;


import com.unity3d.player.UnityPlayer;
import com.unity3d.player.UnityPlayerActivity;


import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.app.Activity;
import android.content.Intent;
import android.util.Log;
import android.view.Menu;


public class MainActivity extends UnityPlayerActivity 
{
     private static String tag = "MainActivity";
private Handler mHandler = new Handler()
{
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch (msg.what) {
case 1:
OpenFile();
break;
default:
break;
}
}
};  
     
private AsyncTaskUtil mDownloadAsyncTask;  
public float size;
public static MainActivity instance;
public static MainActivity getInstance()
{
return instance;
}
     


     
   @Override  
   protected void onCreate(Bundle savedInstanceState) {  
       super.onCreate(savedInstanceState);  
       instance = this;  
   }  
   public void SetSize(float size)
   {
    size = this.size;
    Log.d(tag, this.size+"");
   }
   public void StartLoad(String httpUrl, String apkName)
   {
    mDownloadAsyncTask = new AsyncTaskUtil(MainActivity.this, mHandler);  
       mDownloadAsyncTask.execute(httpUrl, apkName);//必须传入两个参数——参数1:url;参数2:文件名(可以为null)
   }

   private void OpenFile() {
String str = "/test.apk";
String fileName = mDownloadAsyncTask.getFolderPath() + str;
File file = new File(fileName);
if (!file.exists()) {
Log.d("URL", "fileName:" + fileName);
}
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.fromFile(file),
"application/vnd.android.package-archive");
Log.d("URL", "fileName:" + fileName);
startActivity(intent);
}
    
}

上面代码是主activity 表黑部分是要在unity中调用的。调用可以是一个按钮,例如

 AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
        AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity");
        jo.Call("StartLoad", ParentApp.getInstance().updateUrl, "test.apk");

这里是使用AsyncTask进行下载的,在后来可以看到下载进度。下面下载的代码。

package com.example.downapk;


import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.net.URL;
import java.net.URLConnection;
import java.text.DecimalFormat;
import java.util.Timer;
import java.util.TimerTask;


import com.unity3d.player.UnityPlayer;


import android.content.Context;
import android.os.AsyncTask;
import android.os.Environment;
import android.os.Handler;
import android.util.Log;
import android.widget.Toast;


public class AsyncTaskUtil extends AsyncTask<String, Double, Boolean>
{
public

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值