web-dev-qa-db-ja.com

この警告は私のアプリが原因ですか? -「startServiceの暗黙的インテントは安全ではありません」

開発中にLogcatでこの警告が表示されます。それは私のアプリが原因ですか?

16699-16699/tld.me.myapp.debug W/ContextImpl:startServiceを使用した暗黙的なインテントは安全ではありません:Intent {act = com.google.Android.location.internal.GoogleLocationManagerService.START} Android.content.ContextWrapper.bindService:517 com.google.Android.gms.internal.va:-1 com.google.Android.gms.internal.u.connect:-1

私がこれをコードのどこで引き起こしているのかわかりません。

16
cja

http://developer.Android.com/reference/Android/content/Intent.html

インテント解決

使用するインテントには2つの主要な形式があります。

明示的インテントは、(setComponent(ComponentName)またはsetClass(Context、Class)を介して)コンポーネントを指定し、実行する正確なクラスを提供します。多くの場合、これらには他の情報が含まれず、単にユーザーがアプリケーションと対話するときに、アプリケーションが持つさまざまな内部アクティビティを起動する方法です。暗黙的インテントはコンポーネントを指定していません。代わりに、システムがその目的で実行するのに最適な使用可能なコンポーネントを判断するための十分な情報を含める必要があります。暗黙的インテントを使用する場合、そのような任意のインテントが与えられると、それをどうするかを知る必要があります。これは、インテントを処理できるアクティビティ、BroadcastReceiver、またはサービス(または2つ以上のアクティビティ/レシーバー)にインテントをマッピングするインテント解決のプロセスによって処理されます。

コンポーネントを明示的に言及するのは格言かもしれません。

9
Shashi

私はまったく同じ問題に直面しました、そしてそれはGoogle Play Services Libraryで、彼らがAndroid:exported="true"<service>宣言。

Android 5.0以前は、暗黙的なインテントでサービスを開始することが許可されていましたが、現在は不可能であり、警告が表示される代わりに、例外が発生します。

彼らは自分のものを修正する必要があります。

1
Jorge Gil

アクセスしようとしているサービスにフィルターを設定するときは、exported: "false"をexported: "true"にする必要があります。以下のような:

<service
        Android:name=".MyService"
        Android:exported="true" >
        <intent-filter >
            <action Android:name="com.pluralsight.intentrelatedstuffs.action.LOG_TIME"></action>
        </intent-filter>
    </service>
0
user3575480