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. Python 爬虫学习

    #coding:utf-8 #author:Blood_Zero ''' 1.获取网页信息 2.解决编码问题,通过charset库(默认不安装这个库文件) ''' import urllib impo ...

  2. python3之Django多数据库

    1.定义数据库 在django项目中, 一个工程中存在多个APP应用很常见:有时候希望不同的APP连接不同的数据库,这个时候需要建立多个数据库连接.在Django的setting中使用DATABASE ...

  3. Apriori 算法python实现

    1. Apriori算法简介 Apriori算法是挖掘布尔关联规则频繁项集的算法.Apriori算法利用频繁项集性质的先验知识,通过逐层搜索的迭代方法,即将K-项集用于探察(k+1)项集,来穷尽数据集 ...

  4. STM32F103X datasheet学习笔记---RCC(reset and clock control)

    1.前言 本文主要记录stm32 关于reset 和 clock部分 datasheet的内容. 2.reset 有三种类型的reset:system reset, power reset, back ...

  5. redis安全 (error) NOAUTH Authentication required

    Redis 安全 我们可以通过 redis 的配置文件设置密码参数,这样客户端连接到 redis 服务就需要密码验证,这样可以让你的 redis 服务更安全. 实例 我们可以通过以下命令查看是否设置了 ...

  6. FineReport——获取控件值和单元格值

    设置单元格的值(填报预览): //contentPane.setCellValue(1,0,"abc");//参数面板给单元格赋实际值,即可填报 contentPane.curLG ...

  7. C++ code:数值计算之辛普生(Simpson)法求解积分问题

  8. laravel 中间件

    创建中间件命令 php artisan make:middleware CheckLogin 执行完以上命令会在app/Http/Middleware目录下创建一个新的中间件类CheckLogin.p ...

  9. 性能测试七:jmeter进阶之文件上传下载、定时器

    一.上传下载 上传: 1,POST请求,勾选 use …for post 2,同请求一起发送文件里,填写文件名称,参数名称 3,MIME类型: application/octet-stream(非必须 ...

  10. python接口自动化测试二十九:yaml配置文件的写和读

    # 先安装ruamel.yaml模块 写入配置文件: import os# 先安装ruamel.yaml模块from ruamel import yaml # 将字典写入到yamldict = { ' ...