2015-09-07 9 views
5

意思明示する必要があります。はなぜサービスの意図は、我々は次のようにサービスを開始すると

なぜそうですか?なぜアンドロイドがサービスの意図を明確にする必要があるのですか?

+1

セキュリティ...同じインテントユーザに対して複数のアクティビティがある場合は、1つを選択するように求められます...今、サービスでどのように機能するのか想像してください。正確なコンポーネント名 – Selvin

+0

http://developer.android.com/guide/components/intents-filters.html – Sree

+1

@selvinこれは、以前のバージョンのv5(私が信じる)バージョンで働いていたので、うまくいきました... – pskink

答えて

1

アクティビティとは異なり暗黙インテントでサービスを開始すると、ユーザーインターフェイス は含まれません。複数のサービスがインテントを処理できる場合、 Androidはランダムに1つを選択します。ユーザーは サービスを選択するように促されません。

悪意のあるサービスが呼び出し元のアプリケーションにバインドされている場合、攻撃者は任意の悪意のあるデータ を返すか、要求された処理を実行せずに正常に結果を返すことができます。 悪意のあるサービスはデータを盗んで、 要求された操作の完了を嘘つくことができます。

0

"あなたのアプリケーションが安全であることを保証するために、サービスを開始またはバインドするときに明示的な意図を使用し、サービスのインテントフィルタを宣言しないでください。"(From Android developer) それ以外のアプリではサービスなど

0

これまでもう少し:我々は(アクションの名前で)暗黙の意思を使用したい場合は、我々はこのようsetPackageNameを使用する必要が :しかし、注意することが

Intent intent = new Intent(); 
intent.setPackage("com.action.ServicePackageName"); 
intent.setAction("com.action.ActionNameOfService"); 
bindService(intent, yourServiceConectionObject, Service.BIND_AUTO_CREATE); 
//or 
//startService(intent); 

ポイントは、サービスがローカルサービスであればということです;サービスクラスが利用できるように明示的なインテントを使用する必要があります。上記と同じように使用することもできますが、いくつかの答えで述べられているのと同じ理由でExplicitを使うことをお勧めします。 リモートサービスの場合(他のアプリケーションのサービス);私たちはサービスクラスを利用できないため、私たちはこのようにしてサービスに縛らなければなりません。

関連する問題