方式与流程:利用Eclipse编译生成JAR,直接扔到工程的目录下即可使用,不需要配置AndroidManifest.xml等乱七八糟的东西。。。
Eclipse端
版本:
新建android项目
工程创建好之后,在src文件夹下创建新包,名字随意
在新建一个Class类
之后需要添加依赖库 ,Jar目录在unity的安装路径X:\Program Files\Unity\Editor\Data\PlaybackEngines\androidplayer\development\bin下的classes.jar
创建libs文件夹
再把classes.jar直接拖进来,eclipse会自动添加进依赖库,如图:
接着编写刚刚创建的java文件。已经写了几个,分别是调用复制到系统剪切板,和唤醒第三方APP(需要知道包名)。
package com.android.U3D;
import com.unity3d.player.UnityPlayer;
import android.app.Fragment;
import android.content.ClipData;
import android.content.ClipboardManager;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import com.unity3d.player.UnityPlayer;
public class TestPlugins extends Fragment {
private static final String TAG = "Plugin";
private static TestPlugins Instance = null;
private String gameObjectName;
public static TestPlugins GetInstance(String gameObject)
{
if(Instance == null)
{
Instance = new TestPlugins();
Instance.gameObjectName = gameObject;
UnityPlayer.currentActivity.getFragmentManager().beginTransaction().add(Instance, TAG).commit();
}
return Instance;
}
//拷贝String到剪贴板
public String onClickCopy(String str) {
//获取剪贴板管理器:
ClipboardManager cm = (ClipboardManager) getActivity().getSystemService(Context.CLIPBOARD_SERVICE);
// 创建普通字符型ClipData
ClipData mClipData = ClipData.newPlainText("Label", str); //Label是任意文字标签
// 将ClipData内容放到系统剪贴板里。
cm.setPrimaryClip(mClipData);
return "已复制内容到剪切板";
}
//粘贴
public String onClickPaste(){
ClipboardManager cm = (ClipboardManager) getActivity().getSystemService(Context.CLIPBOARD_SERVICE);
String result = "";
ClipData clipData = cm.getPrimaryClip();
//result = cm.toString(); //ClipData{ text/plain "Label"{T:"str"}}; //取出的是ClipData
//result = cm.getText().toString(); //"str" //方法deprecated
ClipData.Item item = clipData.getItemAt(0); //这里获取第一条,也可以用遍历获取任意条
CharSequence charSequence = item.coerceToText(getActivity().getApplicationContext());
result = charSequence.toString();
return result;
}
/**
* 唤起App
* @param String
*/
public boolean DoActiveApp(String packageName)
{
PackageManager packageManager = UnityPlayer.currentActivity.getPackageManager();
//PackageManager packageManager = getPackageManager();
if (checkAppExist(packageName)) {
Intent intent = packageManager.getLaunchIntentForPackage(packageName);
startActivity(intent);
return true;
} else {
//Toast.makeText(UnityPlayer.currentActivity, packageName + "no exist", Toast.LENGTH_SHORT).show();
return false;
}
}
/**
* 检查App是否已安装
* @param String
* @return boolean
*/
private boolean checkAppExist(String packageName) {
PackageInfo packageInfo = null;
try {
packageInfo = UnityPlayer.currentActivity.getPackageManager().getPackageInfo(packageName, 0);
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
return packageInfo != null;
}
}
导出操作
只需要勾选所编辑java文件就行了,其余的都不需要
生成的jar文件要放到u3d工程下的Plugins/Android文件夹下,没有则创建
Unity端调用
调用很简单,就几行。
using UnityEngine;
using System.Collections;
public class TestAndroidPlugin : MonoBehaviour {
// Use this for initialization
void Start () {
AndroidJavaClass jc = new AndroidJavaClass("com.android.U3D.TestPlugins");
var jo = jc.CallStatic<AndroidJavaObject>("GetInstance", gameObject.name);
string str = "Test!!!!!!!!!"
//调用带返回值,无参数的方法,参数为方法名字符串
string callback = jo.Call<string>("onClickCopy", str);
Debug.Log(callback);
}
}