Unity2017在安卓下获取GPS位置时闪退的解决办法

devtools/2024/9/29 18:47:30/

在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:name="android.permission.BLUETOOTH_SCAN" /><uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />  <uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/><uses-permission android:name="android.permission.BLUETOOTH"/><uses-feature android:name="android.hardware.bluetooth_le" android:required="false"/><uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/><uses-permission android:name="android.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.GetStatic<AndroidJavaObject>("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");}}
}


http://www.ppmy.cn/devtools/118829.html

相关文章

7.Javaweb-Ajax

Javaweb-Ajax 文章目录 Javaweb-Ajax一、Ajax简介二、Ajax的特点三、原生Ajax四、Ajax的使用&#xff08;1&#xff09;Get方式&#xff08;2&#xff09;Post方式&#xff08;3&#xff09;解决ie缓存问题&#xff08;4&#xff09;请求超时与网络异常&#xff08;5&#xff0…

【完-网络安全】Windows注册表

文章目录 注册表启动项及常见作用五个根节点常见入侵方式 注册表 注册表在windows系统的配置和控制方面扮演了一个非常关键的角色&#xff0c;它既是系统全局设置的存储仓库&#xff0c;也是每个用户的设置信息的存储仓库。 启动项及常见作用 快捷键 WinR打开运行窗口&#x…

深度学习——D2(数据操作)

N维数组 创建数组 访问元素 一列: [ : , 1 ] 反向累积、正向累积&#xff08;自动求导&#xff09; 梯度 梯度&#xff08;Gradient&#xff09;是微积分中的一个重要概念&#xff0c;主要用于描述一个函数在某个区域内的变化情况。以下是对梯度的详细解释&#xff1a; 一…

(done) Go 语言:三种多文件协作方式

go 语言多文件协作有三种方式&#xff1a; 1.同一文件夹下&#xff0c;同时编译运行多个 go 文件 2.使用 go.mod 配置项目结构&#xff0c;把不同文件分在不同包里 3.把一部分文件编译成动态库 .so 文件&#xff0c;然后一个 main 程序加载调用他们 task1: 同一文件夹下&#x…

编译安装的 Nginx 设置为服务启动

步骤 1: 创建 Nginx Systemd 服务文件 打开服务单元文件&#xff1a; 使用文本编辑器创建一个新的服务文件。例如&#xff0c;使用 nano&#xff1a; sudo nano /etc/systemd/system/nginx.service 添加以下配置&#xff1a; 将下面的内容复制到文件中&#xff0c;确保调整 Us…

APP自动化中 ADB Monkey用法

一、monkey是干什么的&#xff1f; 我们可以使用monkey做手机端性能的压力测试&#xff0c;稳定性测试 二、monkey在使用的时候&#xff0c;他的运行特性 monkey默认配置下执行&#xff0c;会在手机中随机的点击或者轻触我们的手机中应用&#xff0c;不过这个时候&#xff0…

使用爬虫编写一个挖掘更多关键词的脚本

编写一个简单的爬虫脚本来挖掘更多关键词可以使用 Python 和一些流行的库&#xff0c;比如 requests 和 BeautifulSoup。以下是一个基本示例&#xff0c;展示如何从一个网页中提取关键词&#xff1a; 1. 安装必要的库 在开始之前&#xff0c;请确保安装了所需的库。可以通过以…

OJ在线评测系统 前端创建题目(增) 更新题目(改) 题目列表(查) 以及做题页面的开发 基于VUECLI脚手架画界面

目录 前端创建页面的开发一 创建一个路由 用acro design写 前端创建页面的开发二 题目管理页面 搜索 最終效果 题目更新页面的开发 携带参数的那种 修改路由 页码更新细节 我们先处理菜单项的权限控制和权限隐藏 在这里改 属性绑定一个函数 可以参考聚合搜索项目…