2015-12-14 5 views
6

私のアプリがバックグラウンドで実行されている間に権限を変更するユーザーを処理する正しい方法を理解するのに苦労しています。アプリ内でハンドルの権限が変更される

私のアプリでは、ロケーションの変更を登録するロケーションクラスがあり、ロケーションが変更されたときにステータスがサーバーに送信されます。しかし、これはバックグラウンドで実行されます。

私のアプリが起動されると、私は位置情報サービスを使用するかどうかを確認し、そうであればそのクラスの設定を進めます。ただし、ユーザーは自分のアプリをバックグラウンドで設定して設定に入り、その権限を削除できます。私は、クラッシュを避けるためにロケーションサービスからロケーションを要求する前に、自分のロケーションクラスでパーミッションが有効になっていることを確かめます。しかし、私は場所に入ったときに活動していないので、私は自分のアプリに位置情報サービスが必要であることを彼らに促す方法がわからない。

EDIT:

許可が設定で取り消された場合のアンドロイドアプリを再起動するように見えるん。しかし、私は、アンドロイドは、設定によって権限が与えられた場合、あなたのアプリを再起動しないことを確認しました。

+0

これにご相談ください。 http://inthecheesefactory.com/blog/things-you-need-to-know-about-android-m-permission-developer-edition/en – Isuru

+0

権限が取り消された場合にのみ、真となります。編集を参照してください。 – lostintranslation

+2

_androidは、許可が取り消された場合にあなたのアプリを再起動します_ ...この動作はAndroidによってどこに文書化されていますか? – Atul

答えて

4

ユーザーがAndroid-Mのアクセス許可を変更したときにアプリが強制終了され、アプリの実行中に変更されないことがわかりました。これが変わると殺されます。

参照チェックとしてこのビデオ:場所はので、私は私のアプリは位置情報サービスを必要としていることを彼らに促すためにどのように確認していないに来るときhttps://www.youtube.com/watch?v=f17qe9vZ8RM

+1

これは正しいです。 –

+4

私もこれを読んでいます。しかし、これは真実ではないことをテストしています。私のアプリが開いている間に設定に入り、権限を変更して背景のアプリを見ると、私のアプリはまだそこにあります。バックグラウンドアプリのリストからmyアプリをクリックした場合、再起動されません。 – lostintranslation

+0

あなたがアプリが再起動されていないことを確認できますか? – rekire

1

は、しかし、私が活動していないです。

Raise a Notification、あなたのアプリが意図した作業を無効にしたことをユーザーに警告します。 NotificationPendingIntentを経由してActivityにつなぎます。ここでユーザーはその許可を与えることができます。

+1

権限が取り消されている必要はないので、アプリは実際に再起動されます。また、設定で許可されている権限をリッスンする方法もありません。その権限を気にするアクティビティでonResumeをチェックインするだけでよいと仮定します。 – lostintranslation

+0

@lostintranslation: "許可が取り消される必要はなく、アプリケーションは実際に再起動されます" - はい。ただし、あなたが 'START_STICKY'または' START_REDELIVER_INTENT'を使用している場合、サービスだけで再起動することがあります。それから、あなたのサービスはそれが許可を欠いていることに気付き、私の答えで提案したような何かをする必要があります。 – CommonsWare

0

CommonsWareの提案に加えて、onProviderDisabled()には、どのプロバイダ(gps、ネットワーク)が無効になっているのかを知ることができ、依然として有効になっているものに対してはrequestLocationUpdate()があります。両方とも無効になっている場合は、少なくともCell Locationがあなたのアプリにとって有益であるかどうかを確認してください。その場合は、少なくともユーザーに通知が表示されるまでセルの場所を送信し、許可を再度有効にすることができます。PhoneStateListenerを使用してください。

関連する問題