Xamarin Forms : 위치 공유 기능을 구현하는 방법?

Sreejith Sree

앱을 열 때마다 위치가 켜져 있는지 꺼져 있는지 확인해야합니다. 위치가 꺼져 있는 경우 아래 스크린 샷과 같이 위치 공유를 활성화하라는 경고를 사용자에게 표시해야합니다.

여기에 이미지 설명 입력

스레드 의 종속성 서비스를 사용하여 이것을 시도합니다 .

공유 프로젝트의 인터페이스 :

public interface ILocSettings
{
    void OpenSettings();
}

Android 구현

[assembly: Dependency(typeof(LocationShare))]
namespace ProjectName.Droid
{
    public class LocationShare : ILocSettings
    {
        public void OpenSettings()
        {
            //code1
            Android.App.Application.Context.StartActivity(new Android.Content.Intent(Android.Provider.Settings.ActionLocat‌​ionSourceSettings));
            
            //code2
            //LocationManager LM = (LocationManager)Android.App.Application.Context.GetSystemService(Context.LocationService);
            //if (LM.IsProviderEnabled(LocationManager.GpsProvider) == false)
            //{
            //    Context ctx = Android.App.Application.Context;
            //    ctx.StartActivity(new Intent(Android.Provider.Settings.ActionLocationSourceSettings));
            //}
        }
    }
}

마지막으로 아래와 같은 공유 프로젝트에서 :

var myAction = await DisplayAlert("Location", "Please Turn On Location", "OK", "CANCEL");
if (myAction)
{
    if (Device.RuntimePlatform == global::Xamarin.Forms.Device.Android)
    {
        DependencyService.Get<ILocSettings>().OpenSettings();
    }
}
else
{
    await DisplayAlert("Alert", "User Denied Permission", "OK");
}

이것을 실행할 때 예외가 발생합니다. (code1 및 code2에 대해 동일한 예외가 발생 함)

System.NullReferenceException : '개체 참조가 개체의 인스턴스로 설정되지 않았습니다.'

위치가 꺼진 경우에만 경고를 표시해야합니다. 위치가 켜져 있으면 이러한 작업을 수행 할 필요가 없습니다. 위치가 켜져 있는지 꺼져 있는지 어떻게 확인할 수 있습니까?

또한 iOS 및 Windows 플랫폼에 대해 동일한 기능을 구현해야합니다.

업데이트 1

안녕하세요 @Lucas Zhang-MSFT

난 당신의 솔루션을 시도하고 같은 경고 가지고 . 그러나 위치 액세스 권한을 부여한 후에도 여전히 장치의 위치 가 꺼져 있습니다. 내가 좋아하는 장치의 위치에 필요한 사용자가 탭하면 OK 경고 (질문 스크린 샷)에서 옵션을 선택합니다. 위치에서 직접 또는 위치 설정 페이지로 리디렉션합니다.

업데이트 2

GeolocatorPlugin을 시도하고 GPS가 꺼져 있거나 켜져 있는지 확인하기 위해 아래 코드를 사용했습니다. GPS가 켜져 있어도 항상 False 값을 얻습니다.

public bool IsLocationAvailable()
{
    if (!CrossGeolocator.IsSupported)
        return false;

    return CrossGeolocator.Current.IsGeolocationAvailable;
}

안드로이드 서비스에서 아래 수정을했고 이제 위치 설정을 열 수 있습니다.

public class LocationShare : ILocSettings
{
    public void OpenSettings()
    {
        Intent intent = new Android.Content.Intent(Android.Provider.Settings.ActionLocat‌​ionSourceSettings);
        intent.AddFlags(ActivityFlags.NewTask);
        Android.App.Application.Context.StartActivity(intent);
    }
}

위치 설정 페이지를 열기 전에 GPS가 켜져 있는지 또는 꺼져 있는지 확인해야합니다 (위치 권한 아님).

또한 Jack의 iOS 답변을 이해하지 못했습니다. iOS 위치 설정 페이지를 열기 위해 Android에서했던 것처럼 iOS 종속성 서비스를 보여줄 수 있습니까?

Lucas Zhang-MSFT

귀하의 경우에는 Nuget의 PermissionsPlugin 플러그인을 사용할 수 있습니다 .

용법

try
{
    var status = await CrossPermissions.Current.CheckPermissionStatusAsync<LocationPermission>();
    if (status != PermissionStatus.Granted)
    {
        if (await CrossPermissions.Current.ShouldShowRequestPermissionRationaleAsync(Permission.Location))
        {
            await DisplayAlert("Need location", "Gunna need that location", "OK");
        }

        status = await CrossPermissions.Current.RequestPermissionAsync<LocationPermission>();
    }

    if (status == PermissionStatus.Granted)
    {
        //Query permission
    }
    else if (status != PermissionStatus.Unknown)
    {
        //location denied
    }
}
catch (Exception ex)
{
  //Something went wrong
}

최신 정보

시스템 위치가 열려 있는지 확인하고 싶은 것 같군요? 그렇다면 위치 권한을 얻은 후 GPS 정보를 얻을 수 있습니다. 그래도 GPS 정보를 사용할 수 없으면 시스템 설정이 꺼져있는 것입니다. 종속성 서비스를 호출하여 플랫폼 설정 페이지를 열 수 있습니다.

public async void ShareLocation()
{
    var status = await Permissions.RequestAsync<Permissions.LocationAlways>();
    if (status == PermissionStatus.Granted)
    {
        bool gpsStatus = DependencyService.Get<ILocSettings>().isGpsAvailable();
        if (!gpsStatus)
        {
            var myAction = await DisplayAlert("Location", "Please turn on GPS for the proper working of the application.", "TURN ON", "CANCEL");
            if (myAction)
            {
                DependencyService.Get<ILocSettings>().OpenSettings();
            }
        }
    }
}
//ILocSettings
public interface ILocSettings
{
    void OpenSettings();

    bool isGpsAvailable();
}
//Android Dependency Service
[assembly: Dependency(typeof(LocationShare))]
namespace Projectname.Droid.Services 
{
    public class LocationShare : ILocSettings
    {
        public bool isGpsAvailable()
        {
            bool value = false;
            Android.Locations.LocationManager manager = (Android.Locations.LocationManager)Android.App.Application.Context.GetSystemService(Android.Content.Context.LocationService);
            if (!manager.IsProviderEnabled(Android.Locations.LocationManager.GpsProvider))
            {
                //gps disable
                value = false;
            }
            else
            {
                //Gps enable
                value = true;
            }
            return value;
        }

        public void OpenSettings()
        {
            Intent intent = new Android.Content.Intent(Android.Provider.Settings.ActionLocat‌​ionSourceSettings);
            intent.AddFlags(ActivityFlags.NewTask);
            Android.App.Application.Context.StartActivity(intent);
        }
    }
}

iOS 용

public void CheckAuthorization(CLLocationManager manager, CLAuthorizationStatus status)
{

    switch (status)
    {
        case CLAuthorizationStatus.Authorized | CLAuthorizationStatus.AuthorizedAlways | CLAuthorizationStatus.AuthorizedWhenInUse:
            Console.WriteLine("Access");
            break;
        case CLAuthorizationStatus.Denied | CLAuthorizationStatus.NotDetermined | CLAuthorizationStatus.Restricted:
            Console.WriteLine("No Access");
            break;
        default:
            Console.WriteLine("No Access");
            break;
    }
}
UIApplication.SharedApplication.OpenUrl(new NSUrl(UIApplication.OpenSettingsUrlString));

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

Xamarin.forms에서 패널 기능을 구현하는 방법

분류에서Dev

Xamarin Forms : ListView 내에서 Xamarin.forms.Maps의 위치 값을 바인딩하는 방법은 무엇입니까?

분류에서Dev

Spock : 사양 구현간에 기능을 올바르게 공유하는 방법

분류에서Dev

java.util 만 사용하여 "switch"및 "if"문없이 스위치와 유사한 구성을 구현하는 Java 8 기능적 방법은 무엇입니까?

분류에서Dev

CrossMediaManager를 사용하여 Xamarin.Forms의 certian 위치에서 MP3 파일을 재생하는 방법

분류에서Dev

Xamarin Forms : 플랫폼 별 코드를 구현하는 방법

분류에서Dev

Xamarin Forms에서 레이블을 가로로 펼치는 방법

분류에서Dev

Xamarin.Forms : 잠금 화면 오디오 플레이어 컨트롤을 구현하는 방법

분류에서Dev

Xamarin.Forms-API 설명서에서 유효한 XAML 구문을 해결하는 방법

분류에서Dev

Xaml에서 설정된지도를 표시하기 전에 위치 권한을 요청하는 방법. Xamarin.Forms

분류에서Dev

구현 기능 '에서 탐색기 / 파인더의 위치'를하는 방법

분류에서Dev

iOS에서 기능 끄기 스위치를 구현하는 방법

분류에서Dev

Xamarin iOS를 사용하여 URL을 공유하는 방법

분류에서Dev

콜백 체인을 위해 jquery와 유사한 '성공'및 '실패'함수를 구현하는 방법

분류에서Dev

Svelte보기에서 공유 가능한 데이터 모델을 가장 잘 구현하는 방법

분류에서Dev

Xamarin.Forms (공유)

분류에서Dev

명령 줄 도구에서 유틸리티 기능을 구현하는 방법

분류에서Dev

자바 스크립트에서 하위 기능을 구현하는 방법

분류에서Dev

Xamarin Forms 앱에서 카메라를 열기 위해 Android 장치 볼륨 업 / 다운 버튼을 가로채는 방법?

분류에서Dev

Instagram 위치 검색을 구현하는 방법

분류에서Dev

Xamarin Forms PCL-웹 요청을위한 깨끗하고 쉬운 방법?

분류에서Dev

extjs4 [MVC]에서 스톱워치 기능을 구현하는 방법

분류에서Dev

공유 인터넷 연결 + 스위치 + 라우터 설정을 구성하는 방법은 무엇입니까?

분류에서Dev

Xamarin.Forms PCL (공유 프로젝트)과 함께 MongoDB를 사용하는 방법

분류에서Dev

도구를 해결하는 방법 : Xamarin.forms 앱에서 erorr 바꾸기

분류에서Dev

Xamarin Forms의 ListView에서 추가 구분 기호를 제거하는 방법

분류에서Dev

위치 선택 기능을 제공하기 위해 Windows 10에서 드래그 가능한 핀을 만드는 방법은 무엇입니까?

분류에서Dev

많은 유사한 기능에 대해 다중 디스패치를 구현하는 효율적인 방법

분류에서Dev

Xamarin.Forms : 2 ScrollLayout 위와 사이에 원 이미지를 배치하는 방법

Related 관련 기사

  1. 1

    Xamarin.forms에서 패널 기능을 구현하는 방법

  2. 2

    Xamarin Forms : ListView 내에서 Xamarin.forms.Maps의 위치 값을 바인딩하는 방법은 무엇입니까?

  3. 3

    Spock : 사양 구현간에 기능을 올바르게 공유하는 방법

  4. 4

    java.util 만 사용하여 "switch"및 "if"문없이 스위치와 유사한 구성을 구현하는 Java 8 기능적 방법은 무엇입니까?

  5. 5

    CrossMediaManager를 사용하여 Xamarin.Forms의 certian 위치에서 MP3 파일을 재생하는 방법

  6. 6

    Xamarin Forms : 플랫폼 별 코드를 구현하는 방법

  7. 7

    Xamarin Forms에서 레이블을 가로로 펼치는 방법

  8. 8

    Xamarin.Forms : 잠금 화면 오디오 플레이어 컨트롤을 구현하는 방법

  9. 9

    Xamarin.Forms-API 설명서에서 유효한 XAML 구문을 해결하는 방법

  10. 10

    Xaml에서 설정된지도를 표시하기 전에 위치 권한을 요청하는 방법. Xamarin.Forms

  11. 11

    구현 기능 '에서 탐색기 / 파인더의 위치'를하는 방법

  12. 12

    iOS에서 기능 끄기 스위치를 구현하는 방법

  13. 13

    Xamarin iOS를 사용하여 URL을 공유하는 방법

  14. 14

    콜백 체인을 위해 jquery와 유사한 '성공'및 '실패'함수를 구현하는 방법

  15. 15

    Svelte보기에서 공유 가능한 데이터 모델을 가장 잘 구현하는 방법

  16. 16

    Xamarin.Forms (공유)

  17. 17

    명령 줄 도구에서 유틸리티 기능을 구현하는 방법

  18. 18

    자바 스크립트에서 하위 기능을 구현하는 방법

  19. 19

    Xamarin Forms 앱에서 카메라를 열기 위해 Android 장치 볼륨 업 / 다운 버튼을 가로채는 방법?

  20. 20

    Instagram 위치 검색을 구현하는 방법

  21. 21

    Xamarin Forms PCL-웹 요청을위한 깨끗하고 쉬운 방법?

  22. 22

    extjs4 [MVC]에서 스톱워치 기능을 구현하는 방법

  23. 23

    공유 인터넷 연결 + 스위치 + 라우터 설정을 구성하는 방법은 무엇입니까?

  24. 24

    Xamarin.Forms PCL (공유 프로젝트)과 함께 MongoDB를 사용하는 방법

  25. 25

    도구를 해결하는 방법 : Xamarin.forms 앱에서 erorr 바꾸기

  26. 26

    Xamarin Forms의 ListView에서 추가 구분 기호를 제거하는 방법

  27. 27

    위치 선택 기능을 제공하기 위해 Windows 10에서 드래그 가능한 핀을 만드는 방법은 무엇입니까?

  28. 28

    많은 유사한 기능에 대해 다중 디스패치를 구현하는 효율적인 방법

  29. 29

    Xamarin.Forms : 2 ScrollLayout 위와 사이에 원 이미지를 배치하는 방법

뜨겁다태그

보관