android - Unity - Android 10 - BLE 蓝牙 - 背景位置
问题描述
我正在开发一个使用蓝牙扫描服务的 Unity Android 项目。当我升级到 Android 10 (API 29) 时,蓝牙连接开始出现问题。我正在从这篇文章(下面的链接)中获得帮助,其中提到从 Android 10 开始需要包含BACKGROUND_LOCATION
权限。
在 Unity 中,我使用权限实用工具编写了一些代码
if (AndroidRuntimePermissions.CheckPermission(Permission.CoarseLocation) != AndroidRuntimePermissions.Permission.Granted)
{
AndroidRuntimePermissions.RequestPermission(Permission.CoarseLocation);
}
Permission
class 是一个内部类,UnityEngine.Android
似乎没有后台位置权限。见下文,
using UnityEngine.Scripting;
/// <summary>
/// <para>Structure describing a permission that requires user authorization.</para>
/// </summary>
[NativeHeader ("Runtime/Export/Android/AndroidPermissions.bindings.h")]
[UsedByNativeCode]
public struct Permission
{
/// <summary>
/// <para>Used when requesting permission or checking if permission has been granted to use the camera.</para>
/// </summary>
public const string Camera = "android.permission.CAMERA";
/// <summary>
/// <para>Used when requesting permission or checking if permission has been granted to use the microphone.</para>
/// </summary>
public const string Microphone = "android.permission.RECORD_AUDIO";
/// <summary>
/// <para>Used when requesting permission or checking if permission has been granted to use the users location with high precision.</para>
/// </summary>
public const string FineLocation = "android.permission.ACCESS_FINE_LOCATION";
/// <summary>
/// <para>Used when requesting permission or checking if permission has been granted to use the users location with coarse granularity.</para>
/// </summary>
public const string CoarseLocation = "android.permission.ACCESS_COARSE_LOCATION";
/// <summary>
/// <para>Used when requesting permission or checking if permission has been granted to read from external storage such as a SD card.</para>
/// </summary>
public const string ExternalStorageRead = "android.permission.READ_EXTERNAL_STORAGE";
/// <summary>
/// <para>Used when requesting permission or checking if permission has been granted to write to external storage such as a SD card.</para>
/// </summary>
public const string ExternalStorageWrite = "android.permission.WRITE_EXTERNAL_STORAGE";
/// <summary>
/// <para>Check if the user has granted access to a device resource or information that requires authorization.</para>
/// </summary>
/// <param name="permission">A string representing the permission to request. For permissions which Unity has not predefined you may also manually provide the constant value obtained from the Android documentation here: https:developer.android.comguidetopicspermissionsoverview#permission-groups such as "android.permission.READ_CONTACTS".</param>
/// <returns>
/// <para>Whether the requested permission has been granted.</para>
/// </returns>
[MethodImpl (MethodImplOptions.InternalCall)]
[StaticAccessor ("PermissionsBindings", StaticAccessorType.DoubleColon)]
public static extern bool HasUserAuthorizedPermission (string permission);
/// <summary>
/// <para>Request that the user grant access to a device resource or information that requires authorization.</para>
/// </summary>
/// <param name="permission">A string that describes the permission to request. For permissions which Unity has not predefined you may also manually provide the constant value obtained from the Android documentation here: https:developer.android.comguidetopicspermissionsoverview#permission-groups such as "android.permission.READ_CONTACTS".</param>
[MethodImpl (MethodImplOptions.InternalCall)]
[StaticAccessor ("PermissionsBindings", StaticAccessorType.DoubleColon)]
public static extern void RequestUserPermission (string permission);
}
如果您解决了这个问题,请告诉我。非常感谢您的帮助。谢谢你。
解决方案
It's just a string so pass the permission class that you want into it.
Permission.RequestUserPermission( "android.permission.ACCESS_BACKGROUND_LOCATION" );
I used this to ensure I get all three options for location permission request ("alway", "only when open", "never")
推荐阅读
- google-sheets - Google 表格中独特的月份+年份组合
- sql - 我正在尝试使用具有多个 db abcdb、abcdb_index、abcdb_max、abcdb_log 的单个 bak 文件恢复 db
- java - 无法解析导入 org.openqa.selenium.webdriver
- spring - 触发后在 Spring Cloud Function 中重定向
- python - 使用树莓派在启动时播放 wav 文件
- php - 使用 php 上传 2MB 或更多文件时的问题
- html - 角度选项卡 - 不能将两个选项卡按钮居中和 50% witdh
- pandas - 如何在 Pandas DataFrame IN PLACE 中舍入所有值?
- linux - 如何通过 jenkins 和 SSH 在远程机器上运行 docker 命令?
- python - 在 Python 中运行 SQL 查询