【发布时间】:2021-05-30 10:20:19
【问题描述】:
我在使用我的代码激活 android 上的 gps 时遇到问题。 我有我的 AlertDialog,它问我是或否,但之后没有行动。 我有一个“应用程序没有足够的地理位置权限”错误。 这是我意识到的:
清单:
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_GPS" />
<uses-permission android:name="android.permission.ACCESS_ASSISTED_GPS" />
<uses-permission android:name="android.permission.ACCESS_LOCATION" />
<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_WIFI_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />
装配信息:
[assembly: UsesPermission(Android.Manifest.Permission.Internet)]
[assembly: UsesPermission(Android.Manifest.Permission.AccessFineLocation)]
[assembly: UsesPermission(Android.Manifest.Permission.AccessCoarseLocation)]
[assembly: UsesPermission(Android.Manifest.Permission.AccessWifiState)]
[assembly: UsesPermission(Android.Manifest.Permission.ControlLocationUpdates)]
[assembly: UsesPermission(Android.Manifest.Permission.Internet)]
[assembly: UsesPermission(Android.Manifest.Permission.AccessMockLocation)]
[assembly: UsesPermission(Android.Manifest.Permission_group.Location)]
[assembly: UsesPermission(Android.Manifest.Permission.SetAlarm)]
[assembly: UsesFeature("android.hardware.location", Required = false)]
[assembly: UsesFeature("android.hardware.location.gps", Required = false)]
[assembly: UsesFeature("android.hardware.location.network", Required = false)]
主要活动:
namespace alerte
{
public class MainActivity : AppCompatActivity
{
private void Getaffichagemap(string X, string Y, string Ldep, string Lcom, string Lco, string liststationmap)
{
string myHtml = "bla bla bla";
MapView.Settings.JavaScriptEnabled = true;
MapView.Settings.SetGeolocationEnabled(true);
MapView.Settings.SetGeolocationDatabasePath(MapView.Context.FilesDir.Path);
MapView.SetWebChromeClient(new CustomChromeClient(MapView.Context));
MapView.LoadDataWithBaseURL("https://null", myHtml, "text/html", "UTF-8", null);
}
}
public class CustomChromeClient : WebChromeClient
{
private readonly Context _context;
public CustomChromeClient(Context context)
{
_context = context;
}
public override void OnGeolocationPermissionsShowPrompt(string origin, Android.Webkit.GeolocationPermissions.ICallback callback)
{
var builder = new AlertDialog.Builder(_context);
builder.SetTitle("Localisation")
.SetMessage(string.Format("Utiliser votre position actuelle", origin))
.SetPositiveButton("Oui", (sender, args) => callback.Invoke(origin, true, false))
.SetNegativeButton("Non", (sender, args) => callback.Invoke(origin, false, false));
var alert = builder.Create();
alert.Show();
}
}
}
我缺少一些要完成的东西,但我不是该领域的专业人士,无法使其发挥作用。 我接受任何评论或信息。提前致谢
【问题讨论】:
-
从你的描述中,你想使用gps,但是我看不到你在哪里请求gps权限,你需要在你使用它之前通过后面的代码请求它。
-
如何申请授权?我是 C# 新手,我仍然缺乏一些概念,但我很快就能从错误中吸取教训。
-
public override void OnRequestPermissionsResult(int requestCode, string[] permissions, Android.Content.PM.Permission[] grantResults) { Xamarin.Essentials.Platform.OnRequestPermissionsResult(requestCode, permissions, grantResults); base.OnRequestPermissionsResult(requestCode, permissions, grantResults); }
-
ActivityCompat.RequestPermissions(this, new String[] { Manifest.Permission.AccessFineLocation, Manifest.Permission.AccessCoarseLocation }, 1001);
-
我添加了这些行,它似乎可以工作,但无论如何它不是很干净
标签: c# android webview xamarin.android geolocation