Unity如何区分安卓,苹果设备是手机与小米平板价位

获取android设备IMEI,或者android平板ID
IMEI(International Mobile Equipment
Identity)是国际移动设备身份码的缩写,国际移动装备辨识码,是由15位数字组成的"电子串号",它与每台手机一一对应,而且该码是全世界唯一
的。每一只手机在组装完成后都将被赋予一个全球唯一的一组号码,这个号码从生产到交付使用都将被制造生产的厂商所记录。
Android手机IMEI或者Android平板IDI获得方法:
//try to get imei
TelephonyManager tm = (TelephonyManager)
this.getSystemService(Activity.TELEPHONY_SERVICE);&&&&&&&&
&&& imei =
tm.getDeviceId();
if(imei==null)
&&& // android
imei = Secure.getString(this.getContentResolver(),
Secure.ANDROID_ID);&&&
在manifest.xml文件中要添加
android.permission.READ_PHONE_STATE
已投稿到:  最开始考虑使用中间静态链接库来调用手机系统自带的API,但是在研究的过程中发现Android系统将电量等信息记录在了固定的文件中,所以只需要在C#中直接读取就可以而不需要中间库.
  a.Android版
  1.通过C#直接读取,下面的GetBatteryLevel()方法
&int&GetBatteryLevel()&&
&&&&&&&&try&&
&&&&&&&&{&&
&&&&&&&&&&&&string&CapacityString&=&System.IO.File.ReadAllText("/sys/class/power_supply/battery/capacity");&&
&&&&&&&&&&&&return&int.Parse(CapacityString);&&
&&&&&&&&}&&
&&&&&&&&catch&(Exception&e)&&
&&&&&&&&{&&
&&&&&&&&&&&&Debug.Log("Failed&to&read&battery&&"&+&e.Message);&&
&&&&&&&&}&&
&&&&&&&&return&-1;&&
  b.iOS版
  iOS需要用到xcode编写.a静态链接库
  1.在xcode编写.mm文件,实现C++调用iOS的API得到手机电量,部分代码如下:
&   float getiOSBatteryLevel()
      [[UIDevice currentDevice] setBatteryMonitoringEnabled:YES];
      return [[UIDevice currentDevice] batteryLevel];
  2.将上面.mm编译好的.a文件放入Unity工程Assets-Plugins-iOS下(路径不能错);在C#中使用下面的方法调用:
[ DllImport( "__Internal" )]
private static extern float getiOSBatteryLevel();在C#调用此函数就可获得iOS电量
  至于网络状况,Unity自带API就可以获得
  Application.interReachability 
NetworkReachability.NotReachability网络不可达
NetworkReachability.ReachableViaCarrierDataNetwork 通过运营商数据网络可达NetworkReachability.ReachableViaLocalAreaNetwork 通过局域网络可达(wifi)
====================== 部分安卓手机不能使用,因为厂家可能修改文件结构,可以考虑下面的方法===============
在unity工程建立安卓通信,在安卓侧监听电量,主要使用如下代码
在主Activity里加入监听
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
SystemUtil.registerBatteryReceiver(this);
public static int getBatteryState() {
return batteryS
public static void registerBatteryReceiver(Context mainContext) {
if (batteryLevel == 0) {
BroadcastReceiver batteryReceiver = new BroadcastReceiver() {
public void onReceive(Context context, Intent intent) {
if (Intent.ACTION_BATTERY_CHANGED.equals(intent.getAction())) {
batteryLevel = intent.getIntExtra("level", 0);
int curbatteryState = intent.getIntExtra("status", 0);
SetNewBatteryState(curbatteryState);
mainContext.registerReceiver(batteryReceiver, new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
阅读(...) 评论()Unity如何区分安卓、苹果设备是手机与平板?
iOS Unity 4.x 版本与Unity 5.x 系统函数略有不同:
Unity 5.x 的方式为:UnityEngine.iOS.Device.generation;
//******************
Bruce_Xu*********************
#if UNITY_ANDROID
float physicscreen = Mathf.Sqrt(Screen.width * Screen.width + Screen.height * Screen.height) / Screen.
if (physicscreen &= 7f)
Debug.Log("安卓平板");
Debug.Log("安卓手机");
#elif UNITY_IPHONE
Debug.Log(iPhone.generation);
string iP_genneration = iPhone.generation.ToString();
//The second Mothod:
//string iP_genneration=SystemInfo.deviceModel.ToString();
if (iP_genneration.Substring(0, 3) == "iPa")
Debug.Log("苹果平板");
Debug.Log("苹果手机");
没有更多推荐了,开发环境:
Eclipse3.4&&&&& adt12&&&&& jdk6&&&&&&& Androidsdk2.2
Unity3.4&&&&&&&& windows7
测试设备:
HTC Desire HD
本文要涉及到的几个重点问题
1、&unity里怎么使用java插件
2、&unity android中怎么接受汉字
3、&unity调用Android应用程序的步骤
说明一点:这里我们要调用的手机应用程序是发信息的apk程序。
unity里怎么使用java插件
unity里面能使用插件这是unity人都知道的,相信大家都了解过iTween、iGUI、EZGUI等插件,但我们这里要说的是我们自定义的来供我们开发使用的插件。Unity支持基于C,C++或Objctive-C语言的插件。插件允许你的代码调用本地代码库。这使得Unity可以整合其他中间件库或者遗留的游戏代码。插件是Pro版独有特性。对于桌面系统的构建,插件仅仅能在独立版中运行。而构建网页版本时由于安全问题会被禁用。鉴于这里我们主要是研究unity访问android的应用程序,所以我将只提及java代码写出来的插件(编译后的class文件打成的jar包)。
具体关于插件的内容请参看官方手册:
E文差的同学可以看这里:
基础内容就说这么多,下面开始我们的具体内容:
首先在Eclipse中新建一个Android工程,这个没有什么说的。创建完项目之后要做的有两点:
1、将Unity中关于编译Android程序的jar包导入到我们的项目中,具体右击项目选择Properties:
这里unityclasses.jar就是unity 提供的编译Android游戏所需要的jar包,它位于%unity_home%\Editor\Data\PlaybackEngines\androidplayer\bin\classes.jar
2、我们新建的项目默认继承自Activity,这里将其修改为继承自UnityPlayerActivity,并去掉setContentView(R.layout.main);
1 public class SMSActivity extends UnityPlayerActivity {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
在UnityPlayerActivity的onCreate()方法中已经做好了针对unity自己游戏的view布局,这里我们将onCreate继承过来不能将他们的布局给重写掉,否则我们的游戏画面就看不到在unity中做出的绚丽游戏场景了。
准备工作完成了,下面来添加我们的发信息逻辑的具体方法:
1 //我这里所需要的参数是对方的手机号码和要发送短信息的内容,
2 //在unity中调用该方法时传入这两个参数
3 public static void SMSSend(String number, String content){
SmsManager sms = SmsManager.getDefault();
sms.sendTextMessage(number, null, content, null, null);
这里需要注意的一点就是调用发信息的功能需要在Androidmanifest.xml中声明权限:
1 &uses-permission android:name="android.permission.SEND_SMS"/&
好了,我们在Eclipse中要做的工作就到这里了,接下来是把我们写好的Java代码编译成我们需要的插件jar文件。
打开cmd,进入到我们的项目bin\classes文件夹下执行:
jar cvf com.qyxls.sms.jar com\命令
这时候在bin\classes文件夹下会发现一个com.qyxls.sms.jar。这就是我们需要的插件了。(我也有试着从Eclipse中导出jar文件,但不知道为什么最后插件不能使用)&
接下来是创建我们的Unity工程了,同样的,步骤不说。创建完成之后在Project视图中新建一个Plugins文件夹(注意名字不要错,起初我漏掉了一个s都调试了好半天的),再在新创建好的Plugins文件夹下创建一个Android文件夹,然后在Android文件夹下新建一个bin文件夹用来存放我们上一步骤中做出来的jar插件。最后不要忘了把Android项目中的配置文件Androidmanifest.xml文件要考到该目录下,这里面有我们添加的权限信息,不然运行unity程序发信息会报安全错误的。由于该文件中还用到一些资源,所以一并把res文件夹也全部拷贝到Android文件夹下,这样之后的目录结构如下示:
这个样子和Android的项目结构又差不多了吧。&
接下来我们的工作重心转移到unity的代码编写上来。首先就是做出我们的一个测试界面,这个不多说,看效果图直接上代码(这个是很简单很简单的了)。
1 using UnityE
2 using System.C
4 public class Scripts : MonoBehaviour {
public GUISkin myS
private string txtNumber = "";
private string txtMessage = "";
void OnGUI()
GUI.skin = myS
GUI.Label(new Rect(40, 40, 100, 50), "电话号码");
txtNumber = GUI.TextField (new Rect (140, 40, 160, 30), txtNumber);
GUI.Label(new Rect(40, 80, 100, 50), "短信内容");
txtMessage = GUI.TextArea (new Rect (140, 80, 200, 160), txtMessage);
if(GUI.Button(new Rect(240, 250, 100, 40), "发送"))
按照上面的步骤做完的同学会发现:我运行到手机上的应用怎么没有Label和Button上的汉字提示呢?这里就是我们要提到的另一个重点:在Android手机上显示汉字的问题。
首先要使用中文就得有个中文字体了,我这个是用的Android手机上系统的默认字体DroidSansFallback.ttf。找不到字体的同学也可以去我们计算机C盘下去找一个中文字体来用,但要注意找的字体一定要是ttf格式的,这个是unity支持的。
找到字体后的导入方式是和其它资源导入一样的,可以新建一个Resources文件夹来放我们的中文字体,导入之后选中字体,在属性面板中要设置为unicode。
点击Apply后要等待好长一段时间等待unity生成这样的一张巨大的字体贴图:
从贴图尺寸和大小也可以看出,中文字体是很费资源的,这里也建议大家万不得已要用到中文字的话,尽量把需要的字做成图片来用,以达到节省我们宝贵的手机资源的目的。
这样之后我们要告诉unity我们所使用的中文字体:新建一个GUISkin,并将字体设置为我们刚刚导入并设置好的中文字体即可。
这样我们的应用就能显示和输入中文了。
现在终于到了我们的核心:在unity中调用Java插件来实现我们需求的功能了。先来看一下核心代码:
1 private AndroidJavaC
3 void Start ()
ajc = new AndroidJavaClass("com.qyxls.sms.SMSActivity");
8 void SendMsg(string number, string msg)
ajc.CallStatic("SMSSend", new string[]{number, msg});
CallStatic这个函数需要两个参数,第一个是要调用的插件里的函数名,第二个是要调用的函数所需要的参数,要以数组的形式传入,参数可以是任意类型的。
其他的关于这个类的使用可以参照文档。
我们把SendMsg函数添加在发送按钮的响应事件里就可以了:
1 if(GUI.Button(new Rect(240, 250, 100, 40), "发送"))
if(txtNumber != "" && txtMessage != "")
SendMsg(txtNumber, txtMessage);
我们来看看效果,这里避免骚扰别人,并且再给我们的测试来一个反馈,我就麻烦一下一直为我们服务的中国移动了。
全段完整的代码如下:
1 using UnityE
2 using System.C
4 public class Scripts : MonoBehaviour {
public GUISkin myS
private string txtNumber = "";
private string txtMessage = "";
private AndroidJavaC
void Start ()
ajc = new AndroidJavaClass("com.qyxls.sms.SMSActivity");
void OnGUI()
GUI.skin = myS
GUI.Label(new Rect(40, 40, 100, 50), "电话号码");
txtNumber = GUI.TextField (new Rect (140, 40, 160, 30), txtNumber);
GUI.Label(new Rect(40, 80, 100, 50), "短信内容");
txtMessage = GUI.TextArea (new Rect (140, 80, 200, 160), txtMessage);
if(GUI.Button(new Rect(240, 250, 100, 40), "发送"))
if(txtNumber != "" && txtMessage != "")
SendMsg(txtNumber, txtMessage);
void SendMsg(string number, string msg)
ajc.CallStatic("SMSSend", new string[]{number, msg});
到这里我们的工作就全部做完了,整个过程就是上面说明的这些了。
其实,要调用发信息的apk,还有一个更简单的方法的,就是利用Application类的OpenURL来调用:
Application.OpenURL("sms:");
这样会调出发短息的应用界面,而且里面还可以带参数的,但我们这里的重点是说如何使用Java插件的问题,那个方法就不做讨论了。
附上资源下载地址:
原创文章,转载请注明出处:
阅读(...) 评论()如何在Unity中对程序进行 Android 真机断点调试? - 知乎有问题,上知乎。知乎作为中文互联网最大的知识分享平台,以「知识连接一切」为愿景,致力于构建一个人人都可以便捷接入的知识分享网络,让人们便捷地与世界分享知识、经验和见解,发现更大的世界。101被浏览<strong class="NumberBoard-itemValue" title="1分享邀请回答赞同 2 条评论分享收藏感谢收起}

我要回帖

更多关于 小米平板4配置 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信