Unity调用安卓的两种方法

总结的两种方法,供参考。

方法一

(要将方法写到UnityPlayerActivity 类下,不然调用不到):

 1 //获得类
 2
 3 AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
 4
 5
 6
 7 //获得java对象
 8
 9 AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity");
10
11
12
13 //执行方法
14
15 jo.Call("Method",arg);
16
17  

方法二:

 1     //JNI 新建一个线程
 2
 3         AndroidJNI.AttachCurrentThread();
 4
 5
 6
 7         //获得类
 8
 9         IntPtr cls = AndroidJNI.FindClass("com/unity3d/player/UnityPlayer");
10
11         IntPtr fid = AndroidJNI.GetStaticFieldID(cls, "currentActivity", "Landroid/app/Activity;");
12
13         IntPtr obj = AndroidJNI.GetStaticObjectField(cls, fid);
14
15
16
17         //获得类
18
19         IntPtr cls_OurAppActitvityClass = AndroidJNI.FindClass("com/bodhi/TalkingBodhi");
20
21
22
23         //获得方法
24
25         IntPtr enableMethod = AndroidJNI.GetMethodID(cls_OurAppActitvityClass, "EnableADs", "V");
26
27
28
29         //如果方法存在,则执行
30
31         if (AndroidJNI.IsInstanceOf(obj, cls_OurAppActitvityClass) != false) {
32
33             jvalue[] myArray = new jvalue[1];
34
35             AndroidJNI.CallVoidMethod(obj, enableMethod, myArray);
36
37         }
时间: 2024-11-05 12:15:29

Unity调用安卓的两种方法的相关文章

[转]Delphi调用cmd的两种方法

delphi调用cmd的两种方法vars:string;begins:='cmd.exe /c '+edit1.Text+' >c:\1.txt';winexec(pchar(s),sw_hide);sleep(2000);memo1.Lines.LoadFromFile('c:\1.txt'); 2shellexecute(handle,nil,'cmd.exe',pchar(form2.edit1.text),nil,sw_hide);WinExec主要运行EXE文件.如:WinExec(’

struts中调用servlet的两种方法——IcC方式和非IoC方式的代码demo

1 package com.java1234.action;//所在的包 2 3 import java.sql.Connection;//数据库连接的类 4 import java.util.ArrayList;//ArrayList和List是在private List<DataDic> dataDicList=new 5 6 ArrayList<DataDic>();中用到 7 import java.util.List;//ArrayList和List是在private L

ShellExecuteEx 阻塞和异步调用进程的两种方法

阻塞: SHELLEXECUTEINFO ShExecInfo = { 0 }; ShExecInfo.cbSize = sizeof(SHELLEXECUTEINFO); ShExecInfo.fMask = SEE_MASK_NOCLOSEPROCESS; ShExecInfo.hwnd = NULL; ShExecInfo.lpVerb = NULL; ShExecInfo.lpFile = (LPCWSTR)newAppPath.utf16(); // _telegramPath.toL

VBA调用DOS程序两种方法

Set wsh = VBA.CreateObject("WScript.Shell") 'wsh.Run strExePath & " g", vbHide, True Set wshOut = wsh.exec(strExePath & " g").StdOut While Not wshOut.AtEndOfStream sLine = wshOut.ReadLine Debug.Print sLine Wend run可以隐

【开发实例】C#调用SAPI实现语音合成的两种方法

我们都知道现在的语音合成TTS是可以通过微软的SAPI实现的,好处我就不多说了,方便而已,因为在微软的操作系统里面就自带了这个玩意,主要的方式有两种:  1.使用COM组件技术,不管是C++,C#,Delphi都能玩的转,开发出来的东西在XP和WIN7都能跑.(要引入SpeechLib,好像在项目上点引用,然后选到系统COM吧,好久没弄,记不清楚了)  2.使用WIN7的windows api,其实最终还是调用了SAPI,所以开发出来的东西就只能在WIN7上面跑.  其实不管是哪一种,都是调用S

DataContext.ExecuteQuery的两种方法调用

ExecuteQuery主要用于DataContext类直接执行SQL语句的查询,在MSDN上有两种执行方法,下面为两种方法的不同调用: 1.ExecuteQuery<TResult>(String, Object[])   应该是微软的推荐方法,网上几乎都在用的方法 NorthwindDataContext ctx = new NorthwindDataContext("server=xxx;database=Northwind;uid=xxx;pwd=xxx"); st

DEDECMS5.5/5.6/5.7列表页调用TAG标签(热门标签)的两种方法

DEDECMS5.5/5.6/5.7列表页调用TAG标签的两种方法: 一.DedeCMSv5.6及其以前版本: dedecms默认在列表是无法调用tag标签的,经过各位版主们的帮助,现给大家提供出2种方法. 方法1: 在列表需要的位置加入下列代码: [field:id runphp=yes] $tsql = new DedeSql(false); $tags = ''; $tsql->SetQuery("Select i.tagname From dede_tag_list t left 

线程的启动的两种方法,Runnable接口,run()的调用

实现并启动线程有两种方法1.写一个类继承自Thread类,重写run方法.用start方法启动线程2.写一个类实现Runnable接口,实现run方法.用new Thread(Runnable target).start()方法来启动 多线程原理:相当于玩游戏机,只有一个游戏机(cpu),可是有很多人要玩,于是,start是排队!等CPU选中你就是轮到你,你就run(),当CPU的运行的时间片执行完,这个线程就继续排队,等待下一次的run(). 调用start()后,线程会被放到等待队列,等待C

PhpCms V9调用指定栏目子栏目文章的两种方法

第一种.直接写子栏目id ,用cat in {pc:get sql="SELECT * from v9_news where status=99 and catid in(21,22,23,24,25) order by id DESC" num="7" return="data"} {loop $data $r} <li><a href="{$r[url]}" title="{$r[title]}