网站如何验收,广告代发平台,网站建设题库,深圳专业网站建设排名在Unity使用低功耗蓝牙通信#xff08;BLE#xff09;需要用到设备的位置信息。但是调用Input.location.Start()程序会闪退。
解决办法#xff1a;调用原生安卓接口。
参见《Unity2021通过aar调用Android方法》编写一个aar插件gpsplugin#xff0c;在插件中提供获取GPS位…在Unity使用低功耗蓝牙通信BLE需要用到设备的位置信息。但是调用Input.location.Start()程序会闪退。
解决办法调用原生安卓接口。
参见《Unity2021通过aar调用Android方法》编写一个aar插件gpsplugin在插件中提供获取GPS位置的接口StartGPSLocation插件代码如下
package com.example.gpsplugin;import android.app.Activity;
import android.content.Context;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.widget.Toast;public class GPSPluginInstance {private LocationManager locationManager;private LocationListener locationListener;private static final int REQUEST_LOCATION_PERMISSION 1;double latitude 0.0;double longitude 0.0;public int Add(int i, int j) {return i j;}private static Activity unityActivity;public static void receiveUnityActivity(Activity tActivity) {unityActivity tActivity;}public void Toast(String msg) {Toast.makeText(unityActivity, msg, Toast.LENGTH_SHORT).show();}public void StartGPSLocation() {// 初始化 LocationManagerlocationManager (LocationManager) unityActivity.getSystemService(Context.LOCATION_SERVICE);// 创建 LocationListenerif(locationListener null){locationListener new LocationListener() {Overridepublic void onLocationChanged(Location location) {if (location ! null) {latitude location.getLatitude();longitude location.getLongitude();}}Overridepublic void onStatusChanged(String provider, int status, Bundle extras) {// 状态改变时调用}Overridepublic void onProviderEnabled(String provider) {// 提供者启用时调用}Overridepublic void onProviderDisabled(String provider) {// 提供者禁用时调用}};}locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 5000, 0, locationListener);}
}AndroidManifest.xml中添加蓝牙和位置权限注意Android12以上和之前的版本不一样 uses-permission android:nameandroid.permission.BLUETOOTH_SCAN /uses-permission android:nameandroid.permission.BLUETOOTH_CONNECT / uses-permission android:nameandroid.permission.BLUETOOTH_ADMIN/uses-permission android:nameandroid.permission.BLUETOOTH/uses-feature android:nameandroid.hardware.bluetooth_le android:requiredfalse/uses-permission android:nameandroid.permission.ACCESS_FINE_LOCATION/uses-permission android:nameandroid.permission.ACCESS_COARSE_LOCATION/
Unity代码在使用Input.location.Start()的地方替换成StartGPSLocation就行了
public class BLEBluetoothGunMgr : MonoBehaviour
{void Start(){InitializePlugin(com.example.gpsplugin.GPSPluginInstance);}public void GetPos(){ //Input.location.Start()StartGPSLocation();}void InitializePlugin(string pluginName){unityClass new AndroidJavaClass(com.unity3d.player.UnityPlayer);unityActivity unityClass.GetStaticAndroidJavaObject(currentActivity);_pluginInstance new AndroidJavaObject(pluginName);if (_pluginInstance null){Debug.Log(Plugin Instance Error);}_pluginInstance.CallStatic(receiveUnityActivity, unityActivity);}public void Toast(){if (_pluginInstance ! null){_pluginInstance.Call(Toast, Hi,from Unity);}}public void StartGPSLocation(){if (_pluginInstance ! null){_pluginInstance.Call(StartGPSLocation);}}
}