Cara meminta pengguna untuk mengaktifkan Layanan Lokasi lagi

Saya ingin memiliki fungsi yang sama dengan aplikasi Peta, di mana pengguna diminta setiap kali mereka menekan tombol 'lokasi saat ini' untuk mengaktifkan Layanan Lokasi jika tidak aktif:

  • Matikan layanan lokasi
  • Pengguna menekan tombol 'getCurrentLocation'
  • Aplikasi mencoba mendapatkan lokasi menggunakan CLLocationManager
  • Pengguna mendapat pesan 'Aktifkan Layanan Lokasi..." yang menampilkan tombol "Pengaturan" dan "Batal".
  • Pengguna mengetuk 'Batal'
  • Pengguna menekan tombol ''getCurrentLocation' lagi
  • Aplikasi mencoba mendapatkan lokasi menggunakan CLLocationManager lagi
  • Pengguna tidak menerima pesan 'Aktifkan Layanan Lokasi..." lagi

Di aplikasi Peta, pengguna mendapat pesan "Aktifkan Layanan Lokasi..." setiap saat. Bagaimana caranya agar aplikasi saya melakukan hal yang sama? Saya membuat pengguna menggunakan instance baru CLLocationManager, kalau-kalau itu masalahnya, tapi ternyata tidak. Saya tidak melihat pengaturan apa pun yang akan memengaruhi hal ini.

Jika saya membuat Peringatan sendiri, saya tidak bisa mendapatkan fungsi tombol 'Pengaturan' yang sama. Selain itu, saya tidak ingin pengguna melihat beberapa Peringatan yang terlihat sama.

Ada ide?


person toofah    schedule 13.05.2011    source sumber
comment
Jadi fungsionalitas yang kita lihat di aplikasi peta tidak dapat direplikasi di aplikasi kita sendiri, apakah kesimpulan dari semuanya? Sepertinya tidak ada solusi? Ada pembaruan? Saya sedang mengerjakan aplikasi iOS 7...   -  person John Erck    schedule 10.10.2013


Jawaban (3)


Yang baru di iOS 8 ada konstanta yang disebut UIApplicationOpenSettingsURLString.

Dari dokumen Apa yang baru di iOS di UIKit adalah garisnya:

Anda dapat mengarahkan pengguna langsung ke pengaturan terkait aplikasi Anda di aplikasi Pengaturan. Teruskan konstanta UIApplicationOpenSettingsURLString ke metode openURL: dari kelas UIApplication.

Dari dokumentasi Apple:

UIApplicationOpenSettingsURLString

Digunakan untuk membuat URL yang dapat Anda teruskan ke metode openURL:. Saat Anda membuka URL yang dibuat dari string ini, sistem meluncurkan aplikasi Pengaturan dan menampilkan pengaturan khusus aplikasi, jika ada.

Anda dapat meneruskan ini ke metode openURL: aplikasi UIA. Ini mungkin terlihat seperti:

NSURL *settings = [NSURL URLWithString:UIApplicationOpenSettingsURLString];

if ([[UIApplication sharedApplication] canOpenURL:settings])
    [[UIApplication sharedApplication] openURL:settings];
person Aaron Wasserman    schedule 10.09.2014
comment
Ini adalah pertanyaan lama, tapi ini adalah jawaban yang benar pada tahun 2014. - person Jessedc; 21.09.2014

Jika Anda ingin mengarahkan pengguna kembali ke layar Layanan Lokasi di aplikasi Pengaturan, Anda dapat melakukannya dengan mengirimkan mereka ke URL khusus, seperti:

[[UIApplication sharedApplication] openURL:[NSURL URLWithString: @"prefs:root=LOCATION_SERVICES"]];
person Jacob White    schedule 12.02.2012
comment
Rupanya tidak lagi. (stackoverflow.com/questions/9627451/) - person Matthew Lowe; 25.09.2012

Anda dapat menanyakan instance CLLocationManager bersama jika layanan lokasi diaktifkan. Cara yang benar adalah dengan menghormati pilihan pengguna untuk menonaktifkan layanan lokasi.

Namun jika mau, cukup jalankan layanan lokasi dan pengguna akan diminta untuk memulainya lagi. Jika pengguna ikut serta dalam permintaan, lokasi akan mulai dilaporkan pada delegasi Anda seperti biasa. Jika pengguna menolak permintaan Anda, Anda akan mendapatkan panggilan balik yang gagal ke metode delegasi locationManager:didFailWithError:. Kesalahan akan memiliki kode kesalahan kCLErrorDenied.

Saya sangat tidak menyarankan Anda melakukan ini, tetapi Anda dapat mencoba memulai layanan lagi jika pengguna mengatakan tidak, dan pengguna akan ditanya lagi. Namun sebagian besar pengguna akan membenci Anda karenanya.

person PeyloW    schedule 13.05.2011
comment
Memberi +1 kepada pengguna hanya boleh memutuskan apakah mereka ingin mengizinkan suatu aplikasi menggunakan lokasi mereka pada satu titik, saya melihat banyak aplikasi yang saya gunakan baru-baru ini meminta izin secara teratur, meskipun aplikasi tersebut belum pernah diizinkan di masa lalu, dan saya bukan penggemarnya dari - person Matt; 14.05.2011
comment
setuju. jika aplikasi Anda mengandalkan layanan lokasi untuk fungsi penting apa pun, cara terbaik untuk melakukannya adalah dengan mendeteksi kapan layanan lokasi dinonaktifkan dan menampilkan UI pasif di aplikasi Anda yang memberi tahu pengguna dan memungkinkan mereka mengaktifkan kembali layanan lokasi. Jika pengguna ikut serta, Anda kemudian dapat memulai layanan lokasi yang akan meminta pengguna untuk mengaktifkannya. - person XJones; 14.05.2011
comment
Terima kasih atas tanggapan Anda. Saya bersama Anda dan sama sekali tidak ingin mengganggu pengguna saya dengan meminta mereka kembali untuk mengizinkan aplikasi saya mengakses layanan lokasi. Namun dalam kasus ini, pengguna mengetuk tombol dapatkan lokasi terkini, jadi sepertinya tepat untuk memberi tahu mereka bahwa mereka perlu mengaktifkannya. Hal ini sama seperti pada aplikasi Peta ketika pengguna mengetuk tombol dapatkan lokasi saat ini. Saya melakukan seperti yang Anda sarankan, memanggil metode mulai monitor, tetapi tidak meminta ulang pengguna, saya hanya mendapatkan kesalahan kCLErrorDenied. - person toofah; 14.05.2011
comment
Ini tidak benar. Setelah tampilan peringatan otorisasi layanan lokasi ditampilkan, pengguna tidak akan pernah melihatnya lagi. Pernah. (Meskipun ponsel telah disetel ulang.) Bahkan penghapusan dan pemasangan ulang aplikasi tidak akan menampilkannya lagi. Satu-satunya cara pengguna dapat memulihkan otorisasi layanan lokasi adalah dengan membuka aplikasi Pengaturan dan mengaktifkannya kembali secara langsung. - person Yetanotherjosh; 12.08.2011
comment
@Yetanotherjosh selain itu, peringatan lokasi dapat diatur ulang secara manual di Pengaturan › Umum › Atur Ulang › Atur Ulang Peringatan Lokasi. - person MattyG; 12.11.2011
comment
@MattyG memang, saya sendiri melihatnya baru-baru ini. Tampaknya telah ditambahkan dalam pembaruan OS terkini, atau apakah saya melewatkannya? Bagaimanapun, ini berguna. Perhatikan juga bahwa sekarang di iOS 5, menghapus dan menginstal ulang aplikasi akan mengatur ulang semua jenis pertanyaan izin ini, jadi memang pertanyaan saya yang belum pernah ada sekarang telah dibatalkan dalam beberapa hal. - person Yetanotherjosh; 14.11.2011