概述
Unity 与安卓
该篇文章主要是从我目前项目中所涉及的一些安卓设备或数据调用的问题,可能会很浅显;
获取安卓设备的SN串号(关于设备唯一标识符)
通常情况下,如果我们想要获取安卓设备的唯一标识用来识别设备或者做设备管理的话,需要用一个唯一且不变的标识号码;提到唯一标识号码,有人会立刻想到SystemInfo 类 (了解更多SystemInfo类:SystemInfo蛮牛): SystemInfo.deviceUniqueIdentifier ;
但是需要注意的是,通过SystemInfo获取到的唯一标识符是会改变的,没办法用来识别设备;该序列号是根据主板序列号.BIOS序列号.cpu信息.硬盘序列号.操作系统信息 来进行加密或者其他算法得出的,也许是某个东西会随着时间而改变 导致整个获取的标识符是会改变的。
接下来介绍两种安卓设备的可用于标识的方法和标识符;
- SN串号:
获取方法:该方法可以获取大部分安卓手机的SN串号;
AndroidJavaObject jo = new AndroidJavaObject("android.os.Build");
string serial = jo.GetStatic<string>("SERIAL");
可以参考比较完整的写法:
void getSerialNo()
{
if (Application.platform == RuntimePlatform.Android)
{
var UnityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
AndroidJavaClass osBuild = new AndroidJavaClass("android.os.Build");
serialNo = osBuild.GetStatic<string>("SERIAL");
}
else
{
serialNo = "";
}
}
2、IMEI号或者MEID号码;有的手机双卡的话会有两个IMEI号码,不过对于手机来说IMEI号码及MEID是唯一且不变的,我们可以用来识别并管理设备;附上获取方法:
/// <summary>
/// 获取设备IMEI及MEID码
/// </summary>
void getDeviceIDs()
{
var UnityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
var context = UnityPlayer.GetStatic<AndroidJavaObject>("currentActivity");
var telephoneyManager = context.Call<AndroidJavaObject>("getSystemService", "phone");
imei0 = telephoneyManager.Call<string>("getImei", 0);
imei1 = telephoneyManager.Call<string>("getImei", 1);
meid = telephoneyManager.Call<string>("getMeid");
}
获取手机的蓝牙信息
贴出的代码主要是判断当前手机蓝牙是否已经打开
public bool isBluetoothEnabled()
{
bool isBTEnabled = false;
var UnityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
var context = UnityPlayer.GetStatic<AndroidJavaObject>("currentActivity");
var bluetoothManager = context.Call<AndroidJavaObject>("getSystemService", "bluetooth");
if (bluetoothManager == null)
{
// Debug.Log( "isBluetoothEnabled bluetoothManager Get ...Failed");
return isBTEnabled;
}
else
{
//Debug.Log( "isBluetoothEnabled bluetoothManager Get ...Succeed");
var bluetoothAdaptor = bluetoothManager.Call<AndroidJavaObject>("getAdapter");
if (bluetoothAdaptor == null)
{
return isBTEnabled;
}
else
{
isBTEnabled = bluetoothAdaptor.Call<bool>("isEnabled");
return isBTEnabled;
}
}
}
安卓设备的音量控制
可以参考以下链接:关于安卓音量控制
我在这里只贴出手机媒体音量的控制
private const string currentVolume = "getStreamVolume";//当前音量
private static readonly int STREAM_MUSIC = 3;
private static readonly int ADJUST_LOWER = -1;
private static readonly int ADJUST_SAME = 0;
private static readonly int ADJUST_RAISE = 1;
private static AndroidJavaObject audioManager;
void Awake()
{
#if UNITY_ANDROID && !UNITY_EDITOR
AndroidJavaClass UnityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
AndroidJavaObject currentActivity = UnityPlayer.GetStatic<AndroidJavaObject>("currentActivity");
audioManager = currentActivity.Call<AndroidJavaObject>("getSystemService", new AndroidJavaObject("java.lang.String", "audio"));
#endif
}
//调节音量大小
public static void AdjustVolume(int volume)
{
var UnityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
var context = UnityPlayer.GetStatic<AndroidJavaObject>("currentActivity");
var audioManager = context.Call<AndroidJavaObject>("getSystemService", "audio");
audioManager.Call("adjustStreamVolume", STREAM_MUSIC, volume, 0);
}
//直接设置媒体音量
public static void SetVolume(int volume)
{
var UnityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
var context = UnityPlayer.GetStatic<AndroidJavaObject>("currentActivity");
var audioManager = context.Call<AndroidJavaObject>("getSystemService", "audio");
audioManager.Call("setStreamVolume", STREAM_MUSIC, volume, 0);
}
整理有点乱,不过对于我来说类似笔记,可以常常拿出来翻看巩固,也希望能帮助到一些人
最后
以上就是火星上雨为你收集整理的Unity 与安卓的那些事的全部内容,希望文章能够帮你解决Unity 与安卓的那些事所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复