2017-04-01 4 views
1

私はLocationManagerを使用してタブレットの場所を取得して利用するサービスを実装しています。このサービスは、アクティビティの開始および停止です。サービスからアクセス許可を求める方法

最新のAndroidでは、実行時に権限が要求されます。今私は、をonCreatecheckSelfPermissionに使用して、何らかのロケーションマネージャー機能を使用して、requestPermission関数を追加し、onRequestPermissionResultをオーバーライドすることで、これをアクティビティで管理しました。

素晴らしいです。

私のサービスのために、私は同じことをする必要がありますが、これらの機能はアクティビティのためだけに機能するようです。 サービスのアクセス許可を有効にするにはどうすればよいですか?


念のために、私はすでに私がサービスでアクセス許可を有効にすることができますどのようなサービス

答えて

1

サービスでアクセス許可をアクティブにするにはどうすればよいですか?

あなたはありません。アクティビティからアクセス許可をアクティブ化(つまり要求)します。それは交渉可能ではありません。

アクティビティがサービスを開始する前に権限をリクエストするか、最終的にサービスを開始させる(たとえば、ジョブをJobSchedulerとスケジュールする)ことが理想的です。

あなたはあなたのサービスは、もは​​や—は、おそらくユーザーは、あなたが再要求活動の許可にユーザーを導くNotificationを上げることができる—設定からそれらを取り消す必要な権限を持っていることを決定しない場合。

サービスでは、アクセス許可を要求するアクティビティを開始することは技術的に可能です。通常、これは良い考えではありません。ユーザーがその時点で何をしているのか分からず、ユーザーがこの許可要求でユーザーを中断することに不満を抱く可能性があります。

+0

私はそれに完全に同意することができます。私のアプリは実際には活動の構造を持っています。今すぐ*どのようにこれらのアクセス権をサービスに転送するのですか? (理想的には、アクティビティを閉じた後でもサービスを実行したい) – KansaiRobot

+1

@KansaiRobot: "どうすればこれらのアクセス権をサービスに転送できますか?" - 「移転する」ものはありません。ランタイム権限を取得した後、サービスを開始またはバインドするだけです。 – CommonsWare

1

を開始し、停止した活動の権限を求めていますか?

サービスからアクセス許可を要求することはできません。アクセス権は明示的に尋ねられ、UIのどのユーザに表示されるべきかを明示する必要があります。しかし、あなたはアクティビティからの許可を求めることができます。また、成功すると、ユーザーが再びアプリケーションのアクセス許可を無効にするまで、そのリソースにアクセスできます。

どのようにこれらのアクセス許可をサービスに転送できますか?

許可はアプリケーション全体に割り当てられているため、あるアクティビティから別のアクティビティへ、または1つのアクティビティからサービスに転送する必要はありません。アクティビティでパーミッションを取得すると、そのパーミッションがアプリケーション全体に割り当てられ、サービスはその後にリソースにアクセスできます。歓声:

+0

わかりました。何かが私のアプリの構造がそれのために準備ができている場合(アクティビティはすでにアクセス許可を取得し、サービスを開始する)。問題は*どのようにこれらのアクセス権をサービスに「転送」できますか? – KansaiRobot

関連する問題