unity调用安卓arr方法
1、新建empty activity
2、新建new module,选Android libarary,新建新的java class
3、获得android中activity的方法:
安卓端:
public static Activity _unityActivity;
unity(){
if(null==_unityActivity){
getActivity();
}
}
/*
获取unity项目的上下文
*/
Activity getActivity(){
if(null==_unityActivity){
try{
Class<?> classtype=Class.forName("com.unity3d.player.UnityPlayer");
Activity activity=(Activity)classtype.getDeclaredField("currentActivity").get(classtype);
_unityActivity=activity;
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (NoSuchFieldException e) {
e.printStackTrace();
}
}
return _unityActivity;
}
unity端:
AndroidJavaObject activity = new AndroidJavaClass("com.example.mainlibrary.unity").GetStatic<AndroidJavaObject>("_unityActivity");
(包名为com.example.mainlibrary,class名为unity时)
4、使用android端的方法
安卓端:
///获取唯一ID 返回一个String 直接接收使用就可以
public String GetID(){
String serial = null;
String m_szDevIDShort = "35" +
Build.BOARD.length()%10+ Build.BRAND.length()%10 +
Build.CPU_ABI.length()%10 + Build.DEVICE.length()%10 +
Build.DISPLAY.length()%10 + Build.HOST.length()%10 +
Build.ID.length()%10 + Build.MANUFACTURER.length()%10 +
Build.MODEL.length()%10 + Build.PRODUCT.length()%10 +
Build.TAGS.length()%10 + Build.TYPE.length()%10 +
Build.USER.length()%10 ; //13 位
try {
serial = android.os.Build.class.getField("SERIAL").get(null).toString();
//API>=9 使用serial号
return new UUID(m_szDevIDShort.hashCode(), serial.hashCode()).toString();
} catch (Exception exception) {
//serial需要一个初始化
serial = "serial"; // 随便一个初始化
}
return new UUID(m_szDevIDShort.hashCode(), serial.hashCode()).toString();
//使用硬件信息拼凑出来的15位号码
}
public static ClipboardManager clipboard = null;
// 向剪贴板中添加文本
public void copyTextToClipboard(final Context activity, final String str) throws Exception {
clipboard = (ClipboardManager) activity.getSystemService(Activity.CLIPBOARD_SERVICE);
ClipData textCd = ClipData.newPlainText("data", str);
clipboard.setPrimaryClip(textCd);
}
unity端:
AndroidJavaObject _ajc;
_ajc = new AndroidJavaObject("com.example.mainlibrary.unity");
uiText.text += _ajc.Call<string>("GetID");
_ajc.Call("copyTextToClipboard", activity, input);
5、打包安卓端arr(build->make module)放到unity端的plugins/Android文件夹中
完整代码
package com.example.mainlibrary;
import android.content.ClipData;
import android.content.ClipDescription;
import android.content.ClipboardManager;
import android.content.Context;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
import android.os.Build;
import android.app.Activity;
import android.telephony.TelephonyManager;
import android.util.Log;
import android.widget.Toast;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.LineNumberReader;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.UUID;
public class unity{
public static Activity _unityActivity;
unity(){
if(null==_unityActivity){
getActivity();
}
}
/*
获取unity项目的上下文
*/
Activity getActivity(){
if(null==_unityActivity){
try{
Class<?> classtype=Class.forName("com.unity3d.player.UnityPlayer");
Activity activity=(Activity)classtype.getDeclaredField("currentActivity").get(classtype);
_unityActivity=activity;
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (NoSuchFieldException e) {
e.printStackTrace();
}
}
return _unityActivity;
}
/*
call unity的方法
*/
boolean callUnity(String gameObjectName, String functionName, String args){
try {
Class<?> classtype = Class.forName("com.unity3d.player.UnityPlayer");
Method method =classtype.getMethod("UnitySendMessage", String.class,String.class,String.class);
method.invoke(classtype,gameObjectName,functionName,args);
return true;
} catch (ClassNotFoundException e) {
} catch (NoSuchMethodException e) {
} catch (IllegalAccessException e) {
} catch (InvocationTargetException e) {
}
return false;
}
///获取唯一ID 返回一个String 直接接收使用就可以
public String GetID(){
String serial = null;
String m_szDevIDShort = "35" +
Build.BOARD.length()%10+ Build.BRAND.length()%10 +
Build.CPU_ABI.length()%10 + Build.DEVICE.length()%10 +
Build.DISPLAY.length()%10 + Build.HOST.length()%10 +
Build.ID.length()%10 + Build.MANUFACTURER.length()%10 +
Build.MODEL.length()%10 + Build.PRODUCT.length()%10 +
Build.TAGS.length()%10 + Build.TYPE.length()%10 +
Build.USER.length()%10 ; //13 位
try {
serial = android.os.Build.class.getField("SERIAL").get(null).toString();
//API>=9 使用serial号
return new UUID(m_szDevIDShort.hashCode(), serial.hashCode()).toString();
} catch (Exception exception) {
//serial需要一个初始化
serial = "serial"; // 随便一个初始化
}
return new UUID(m_szDevIDShort.hashCode(), serial.hashCode()).toString();
//使用硬件信息拼凑出来的15位号码
}
public String GetXX(){
return "xxxx";
}
public static ClipboardManager clipboard = null;
// 向剪贴板中添加文本
public void copyTextToClipboard(final Context activity, final String str) throws Exception {
clipboard = (ClipboardManager) activity.getSystemService(Activity.CLIPBOARD_SERVICE);
ClipData textCd = ClipData.newPlainText("data", str);
clipboard.setPrimaryClip(textCd);
}
// 从剪贴板中获取文本
public String getTextFromClipboard() {
if (clipboard != null && clipboard.hasPrimaryClip()
&& clipboard.getPrimaryClipDescription().hasMimeType(ClipDescription.MIMETYPE_TEXT_PLAIN)) {
ClipData cdText = clipboard.getPrimaryClip();
ClipData.Item item = cdText.getItemAt(0);
return item.getText().toString();
}
return "null";
}
//安卓端弹出系统Tip 可以直接调用
public void SendTip(String congtent){
Toast.makeText(getActivity(),congtent,Toast.LENGTH_SHORT).show();
}
}
public Text uiText;
AndroidJavaObject _ajc;
void Start()
{
#if UNITY_ANDROID
_ajc = new AndroidJavaObject("com.example.mainlibrary.unity");
uiText.text += string.Format("已经点击!!正在获取\n");
uiText.text += _ajc.Call<string>("GetID");// GetID是安卓端的代码,这里通过call arr包调用这一方法,返回一个string值,就可以获得手机的唯一验证码了
uiText.text += "\n";
// uiText.text += _ajc.Call<string>("getMacAddress");// GetID是安卓端的代码,这里通过call arr包调用这一方法,返回一个string值,就可以获得手机的唯一验证码了
string input = "aa";
uiText.text += _ajc.Call<string>("GetXX");
uiText.text += "\n";
AndroidJavaObject androidObject = new AndroidJavaObject("com.example.mainlibrary.unity");
uiText.text += input;
AndroidJavaObject activity = new AndroidJavaClass("com.example.mainlibrary.unity").GetStatic<AndroidJavaObject>("_unityActivity");//("currentActivity");
if (activity == null)
return;
uiText.text += "5";
// 复制到剪贴板
androidObject.Call("copyTextToClipboard", activity, input);
uiText.text += "6";
// 从剪贴板中获取文本
string text = androidObject.Call<string>("getTextFromClipboard");
uiText.text += text;
#endif
}