Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将目标api升级到29时,xamarin在后台形成android应用时后台位置不工作_Android_Xamarin_Xamarin.forms_Permissions_Location - Fatal编程技术网

将目标api升级到29时,xamarin在后台形成android应用时后台位置不工作

将目标api升级到29时,xamarin在后台形成android应用时后台位置不工作,android,xamarin,xamarin.forms,permissions,location,Android,Xamarin,Xamarin.forms,Permissions,Location,我有一款xamarin forms应用程序,在设置android目标api级别28时,具有后台跟踪和前台服务,运行良好,但升级后目标api级别29,将应用程序上传到游戏商店,未设置应用程序的后台位置权限,因此应用程序在后台时无法获取位置 此清单包含以下权限: <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android

我有一款xamarin forms应用程序,在设置android目标api级别28时,具有后台跟踪和前台服务,运行良好,但升级后目标api级别29,将应用程序上传到游戏商店,未设置应用程序的后台位置权限,因此应用程序在后台时无法获取位置

此清单包含以下权限:

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" />

谢谢。

来自Android 10,背景位置作为独立资源提供。除了前台权限外,应用程序还必须明确请求此权限

@TargetApi(29)
private fun Context.checkLocationPermissionAPI29(locationRequestCode : Int) {
    if (checkSinglePermission(Manifest.permission.ACCESS_FINE_LOCATION) &&
        checkSinglePermission(Manifest.permission.ACCESS_COARSE_LOCATION) &&
        checkSinglePermission(Manifest.permission.ACCESS_BACKGROUND_LOCATION)) return
    val permList = arrayOf(Manifest.permission.ACCESS_FINE_LOCATION, 
                           Manifest.permission.ACCESS_COARSE_LOCATION,
                           Manifest.permission.ACCESS_BACKGROUND_LOCATION)
    requestPermissions(permList, locationRequestCode)
    
}

private fun Context.checkSinglePermission(permission: String) : Boolean {
    return ContextCompat.checkSelfPermission(this, permission) == PackageManager.PERMISSION_GRANTED
}

在Android 10.0之后,访问背景位置的权限是新的。即使您已将目标版本设置为Api 29,但Xamarin.Android中的support SDK版本仍然是v28.x.x.x(Android 9.0)。因此该枚举现在在Xamarin.Android中仍然不可用。您需要的只是等待SupportSDK的更新

在您的情况下,访问背景位置将与旧版本兼容。 如果应用程序申请访问精细位置访问粗略位置,系统将在构建过程中自动添加权限访问背景位置

=====================================更新===============================

在Android 10(API级别29)及更高版本上,为了在运行时请求后台位置访问,您必须在应用程序清单中声明访问后台位置权限。在Android的早期版本中,当你的应用程序接收前台位置访问时,它也会自动接收后台位置访问

<manifest ... >
  <!-- Required only when requesting background location access on
       Android 10 (API level 29) and higher. -->
  <uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
</manifest>


更多信息请参阅android文档。

Access\u BACKGROUND\u位置未在清单中找到。权限可能对您而言,它是一个
清单。权限。AccessBackgroundLocation
这些权限仅与清单中找到的位置相关。权限。Manifest.Permission.AccessFineLocation、Manifest.Permission.accessRouseLocation、Manifest.Permission.AccessLocationExtraCommands、Manifest.Permission.LocationHardware、Manifest.Permission。AccessMockLocation@ahmedgaber嗨,解决了吗?@JuniorJiang MSFT嗨,不,不解决在这种情况下,我将使用android 10设备面对面程序,没有任何时间的权限,只生成权限,只有在使用应用程序时,才有此问题的解决方案。thanks@ahmedgaber在Android 10(API级别29)及更高版本上,为了在运行时请求后台位置访问,您必须在应用程序清单中声明“访问后台位置”权限。在早期版本的Android上,当您的应用程序接收到前台位置访问时,它也会自动接收后台位置访问。你可以看看官方文件。我已经用这个更新了答案。谢谢你的帮助,他们不会更新这个包。您应该升级到AndroidX。参考。一旦我找到所有步骤,我将发布一个回复,即使是背景位置更新也不适用于api级别28。Hi@sameer不适用于api 28,这些仅适用于29,并通过下面标记的解决方案解决
<manifest ... >
  <!-- Required only when requesting background location access on
       Android 10 (API level 29) and higher. -->
  <uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
</manifest>