2017-05-19 4 views
-1

私は実行時のアクセス権に取り組んでいます。私は自分のアクティビティクラスに画像を持つレポートを作成しているときに、許可が変更されたときにアプリケーションがクラッシュし、データが失われました。私はOnsaveInstanceを使用しましたが、本当にしたいことはしません。誰かが設定からアプリの権限を変更してレポートを保存すると、アプリを再起動したいと考えています。アプリケーションのアクセス権を変更すると、再度呼び出されたoncreate()が発生します。

  • 許可が変更されたときに、どのメソッドが呼び出されますか。

  • 許可がバックグラウンドから変更されていることをどのように知っていますか?

答えて

1

あなたは this answer

のように、あなたの活動の起動や履歴書に権限を確認することができますし、アプリを再起動するためにあなたがここで活動を再開するために、このQ/ANS thread、受け入れ答えの1からすべての答えを試すことができます私は許可が背景から変更されていることを知ってどのように

Intent i = getBaseContext().getPackageManager() 
      .getLaunchIntentForPackage(getBaseContext().getPackageName()); 
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
startActivity(i); 
1

。?

設定から、ユーザーが以前に付与したアクセス許可をユーザーが削除すると、プロセスはすぐに終了します。あなたは、次にアプリケーションが実行されるときにアクセス許可が変更されたことがわかります。

設定から、ユーザーが以前に付与していなかった権限をユーザーが付与した場合、プロセスはそのままになりますが、新しい権限についても通知されません。適切な時点でcheckSelfPermission()に電話して、今までになかった許可を得ているかどうかを確認することができます。

1

現在、許可を持っているかどうかを確認するには、ContextCompat.checkSelfPermission()を使用してください。詳しくは、the developer docsを参照してください。

バックグラウンドスレッドでパーミッションが必要な場合は、作業を行う前にパーミッションがあるかどうかをチェックします。許可を得ていない場合は、作業をスキップする必要があります。続行すると、コードはSecurityExceptionになる可能性が最も高くなります。

必要な権限を持っていないときにどのように処理するかは、ユースケースによって異なります。権限がないためにバックグラウンドタスクを実行できなかったことをユーザーに知らせるシステム通知を作成することができます。ユーザーが通知をタップすると、タスクを再試行する前にユーザーから許可を要求できます。ユーザーからのアクセス許可を要求する方法については、同じ開発者ドキュメントを参照してください。

バックグラウンドタスクを中止しても問題ありませんが、それだけでもできますが、バックグラウンドタスクに不足している権限が必要であることをユーザーインターフェイスのどこかに示して、 (オプションの)バックグラウンドタスクがその作業を行うことができます。

関連する問題