1、unity与安卓通讯的两种方法:

第一种是unity导出安卓工程,在unity的BuildSetting窗口可以将unity工程导出为安卓工程,然后再用Eclipse或者Android Studio打开,Eclipse目前已经被放弃了,现在安卓开发都用Android Studio,然后写完通讯业务,再由Android Studio导出apk;第二种方法是在Android Studio中创建一个Module,将通讯接口写在这个Module里面,再导出jar包,将这个jar包以及manifest文件导入unity工程面板,放在Plugins/Android文件夹下,供unity调用。我们通常使用第二种方法。
 

2、unity如何调用安卓

public class UnityCallAndroid:MonoBehaviour{

    private AndroidJavaClass ajc;
private AndroidJavaObject ajo; // Use this for initialization
void Start () {
ajc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
ajo = ajc.GetStatic<AndroidJavaObject>("currentActivity");
} //调用安卓方法
public void callAndroid()
{
ajo.Call("broadcast");//参数是方法名,可以带参数,可以有返回值
} }

3、安卓如何调用unity

public class Main2Activity extends UnityPlayerActivity {

    @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
} //调用unity
public void callUnity(String obj,String func,String params)
{
//第一个参数是挂载脚本的gameobject,第二个参数是方法名,最后是方法参数
UnityPlayer.UnitySendMessage(obj,func,params);
}

4、需要注意的事

首先,Android Studio导出jar包时,需要配置好对应的manifest文件,注意包名、最小支持的API Level和target API Level需要与unity中的Player Setting中的设置保持一致,其实unity在导出apk时也会有一份manifest文件,在unity安装目录比如unity2017\Editor\Data\PlaybackEngines\AndroidPlayer\Apk中,有一个unity的默认AndroidManifest文件,在你导出apk时,unity会复制一份该manifest文件,然后根据playerSetting上的设置来修改该manifest,注意多个manifest文件的冲突;另外,需要安装好对应的android sdk版本,不然导出时会报错。
 

5、unity如何发送接收安卓广播

安卓广播机制就是在安卓中,有一些操作完成以后,会发送广播,如果某个程序接收了这个广播,就会做相应的处理。这个广播机制是由安卓操作系统提供的,广播需要有发送者和接收者,在发送者中,可以这样写这样一个java方法供unity调用:

//发送广播
public void broadcast(String name,String content)
{
Intent intent=new Intent();
intent.setAction(name);//广播的名字
intent.putExtra("content",content);//指定广播内容
sendBroadcast(intent); //发送广播
}
在接收广播之前,我们需要注册一个广播,而注册分两种:静态注册、动态注册,静态注册是将需要监听的广播写进manifest文件中,动态注册则是在代码中注册,比如:

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
intentFilter=new IntentFilter();
actionName="";
intentFilter.addAction(actionName);
msgListener=new MsgListener();
registerReceiver(msgListener,intentFilter);
}
接收广播就必须写一个类继承BroadcastReceiver:

//广播监听类
class MsgListener extends BroadcastReceiver
{
@Override
public void onReceive(Context content, Intent intent)
{
String action=intent.getAction();
if (actionName.equals(action))
{
String msg=intent.getStringExtra("content");
Toast.makeText(getApplicationContext(),msg,Toast.LENGTH_SHORT).show();
}
}
}

6、unity如何接收到广播后从后台切换到前台

@Override
public void onReceive(Context content, Intent intent)
{
String action=intent.getAction();
if (actionName.equals(action))
{
String msg=intent.getStringExtra("content");
Toast.makeText(getApplicationContext(),msg,Toast.LENGTH_SHORT).show();
//后台到前台
Intent inten = new Intent("android.intent.action.MAIN");
inten.setComponent(new ComponentName(getApplicationContext().getPackageName(), Main2Activity.class.getName()));
intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT
| Intent.FLAG_ACTIVITY_NEW_TASK
| Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
getApplicationContext().startActivity(inten);
}
}
按上面这种方法,每次都会重启该Activity,如果只想单纯的从后台切换到前台,可以使用singleInstance的方式,只需在manifest文件中加入android:launchMode="singleInstance"即可
 

7、unity安卓程序如何保活(减小被安卓系统杀死的几率)

普通的程序无法像微信这种大佬一样直接加入白名单,那么如何做app进程的保活呢,方法有很多,一是启动前台Service,伴随着Notification(通知栏),系统会默认给进程高优先级,第二种是使用两个进程互相守护,如果其中一个进程监测到另一个进程被杀死,马上拉起它,第三种是一像素保活,很流氓的方法,但也很有效,就是在手机黑屏时创建一个透明像素的Activity,亮屏时就关闭。方法有很多,我暂时用过的只有是第一种,其他还没试过。Service写法是这样:

public class  MyService extends Service
{
/** 标识服务如果被杀死之后的行为 */
int mStartMode; /** 绑定的客户端接口 */
IBinder mBinder; /** 标识是否可以使用onRebind */
boolean mAllowRebind; /** 当服务被创建时调用. */
@Override
public void onCreate() {
super.onCreate();
} /** 调用startService()启动服务时回调 */
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
return ;
} /** 通过bindService()绑定到服务的客户端 */
@Override
public IBinder onBind(Intent intent) {
return null;
} /** 通过unbindService()解除所有客户端绑定时调用 */
@Override
public boolean onUnbind(Intent intent) {
return mAllowRebind;
} /** 通过bindService()将客户端绑定到服务时调用*/
@Override
public void onRebind(Intent intent) { } /** 服务不再有用且将要被销毁时调用 */
@Override
public void onDestroy() {
super.onDestroy();
}
最后,在manifest文件中加上:<service android:name=".MyService" />
 

如有错误,欢迎指正

unity与安卓通讯的一些事儿的更多相关文章

  1. unity调用安卓方法实现安装apk文件(androidx)

    原文链接:点击打开 unity想要实现安装apk文件需要与安卓通讯,所以需要自己来实现安卓代码. 第一步先要新建一个安卓项目提供给unity来使用,我这里使用的工具是android studio4.1 ...

  2. UNITY 打包安卓APK

    1,安装JDK.这个直接下就行了. 2,安装android sdk相关.这个比较蛋疼,官网是被墙的.有些网站的包还是需要访问墙外下载的.关键是找对那个能用的包(对我来说就是不FQ). http://p ...

  3. Unity获取安卓手机运营商,电量,wifi信号强度,本地Toast,获取已安装apk,调用第三方应用,强制自动重启本应用

    一个完整的游戏项目上线需要不断的完善优化,但是到了后期的开发不再仅仅是游戏了,它的复杂度远远大于纯粹的应用开发.首先必须要考虑的就是集成第三方SDK,支付这块渠道商已经帮你我们做好了,只需要按照文档对 ...

  4. Unity调用安卓Android的Toast

    需求:在游戏中弹窗消息,调起安卓的Toast 项目中需要做Unity和安卓交互时,经常需要通过安卓Toast来做简单的输出,以便于测试. 方法一:Unity中,C#主导 // Unity调用安卓的土司 ...

  5. Unity与安卓IOS交互

    记录下  安卓与Unity交互中  跳坑  找到的资料. <1>建立交互 http://blog.csdn.net/lizhengwei1989/article/details/54631 ...

  6. Unity调用安卓中的方法遇到的问题

    最近在用U3D做一个简单的迷宫游戏,在项目中利用Unity制作游戏场景,在android中调用游戏场景,并在游戏结束后调用安卓方法,传递参数,退出游戏场景 查找网上资料,基本上Unity调用安卓的写法 ...

  7. Unity和安卓互调

    Unity调安卓 AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); And ...

  8. Unity发布安卓Splash Image适应手机、平板

    问题描述: Unity发布安卓应用时,遇到只能添加一张SplashImage而需要适配手机及平板不同分辨率处理 解决方法: http://blog.csdn.net/aiyan1111111/arti ...

  9. unity接入安卓sdk (unity调用安卓工程)

    1.安装jdk 并且配置环境,这个网上资料很多,这里不说了 2.安卓开发软件eclipse集成环境版 下载地址 http://tools.android-studio.org/index.php/ad ...

随机推荐

  1. mysql 案例 ~ pt-xtrabackup 使用

    一 简介:学习innobackup工具使用 二 功能: 备份全库/单库/单表 三 常用命令  一 全库  目的 每天日常备份  备份 innobackupex --defaults-file=/etc ...

  2. 对numpy中shape的理解

    from:http://blog.csdn.net/by_study/article/details/67633593 环境:Windows, Python3.5 一维情况: >>> ...

  3. 从Linux内核中获取真随机数【转】

    转自:http://www.cnblogs.com/bigship/archive/2010/04/04/1704228.html 内核随机数产生器 Linux内核实现了一个随机数产生器,从理论上说这 ...

  4. SharePoint 2010:搜索服务当前处于脱机状态

    错误 搜索服务当前处于脱机状态.请访问 SharePoint 管理中心中的"服务器上的服务"页,以验证是否启用了该服务.这也可能是由于正在移动索引器所致.   正在配置网站集搜索关 ...

  5. 016_nginx运维问题总结

    一.关于nginx请求包过大的解决思路 message-api.jyall.me.conf nginx报错问题问题定位,经分析跟接入navigator后关联不大,可参考一下结论连接超时抓包分析了一下每 ...

  6. sqlserver2008r2实现镜像

    拓扑图 环境 主服务器: 192.168.8.16 winserver2008b 镜像服务器 192.168.11.128 mssql1 见证服务器: 192.168.8.69 server2008c ...

  7. Spark学习之第一个程序打包、提交任务到集群

    1.免秘钥登录配置: ssh-keygen cd .ssh touch authorized_keys cat id_rsa.pub > authorized_keys chmod 600 au ...

  8. JDK1.5引入的concurrent包

    并发是伴随着多核处理器的诞生而产生的,为了充分利用硬件资源,诞生了多线程技术.但是多线程又存在资源竞争的问题,引发了同步和互斥,并带来线程安全的问题.于是,从jdk1.5开始,引入了concurren ...

  9. CCF2015122消除类游戏(C语言版)

    问题描述 消除类游戏是深受大众欢迎的一种游戏,游戏在一个包含有n行m列的游戏棋盘上进行,棋盘的每一行每一列的方格上放着一个有颜色的棋子,当一行或一列上有连续三个或更多的相同颜色的棋子时,这些棋子都被消 ...

  10. Renderscript图像处理

    作者:慧能 最近正在学习renderscript,后期会整理一篇完整的文档,先记着.... https://blog.csdn.net/codemydream/article/details/5346 ...