149

AIDL を介して他のアプリケーションにバインドされるサービスを作成し、次のようにマニフェストに追加します。

<service android:name=".MyService">
    <intent-filter>
        <action android:name="org.example.android.myservicedemo.IService" />
    </intent-filter>
</service>

ここで、IService は AIDL インターフェイスです。

このようにして、Eclipse はExported service does not need permissionという警告を表示します。を削除するintent-filterと、警告は消えますが、明らかにアプリケーションはサービスにバインドできません。

この警告はどういう意味ですか?

4

3 に答える 3

134

SDKをバージョン20に更新したときに同じ問題が発生しました。次のようにandroid:exportedプロパティ を追加して削除しました。android:exported="false"

<service android:name=".MyService"
    android:exported="false">
    <intent-filter>
        <action android:name="org.example.android.myservicedemo.IService" />
    </intent-filter>
</service>

このドキュメントを参照してください

于 2012-08-04T06:04:59.970 に答える
60

アクティビティの使用を独自のアプリケーションに制限する場合はexported=false、アクティビティのマニフェスト ステートメントに追加する必要があります。

他のアプリケーションがそれを使用できるようにする場合 (クラス名を使用して明示的に、またはデータ型またはアクションのインテントを使用することにより)、次の 2 つの選択肢があります。

  • アクセス許可を使用してこれらのアプリケーションを制限する
  • すべてのアプリケーションがそれを使用できるようにするtools:ignore="ExportedActivity"と、アクティビティのマニフェスト ステートメントに追加できます。

--

tools:ignore="ExportedService"を使用したサービスと、を使用したコンテンツ プロバイダーにも同じ理由が適用されtools:ignore="ExportedContentProvider"ます。

于 2012-08-31T14:23:28.560 に答える
4

Jensが言ったように、「これは、ユーザーが自分の電話に持っている他の (任意の) アプリケーションが、あなたの Service にバインドし、AIDL インターフェースを通じて公開されている任意のメソッドを呼び出すことができることを意味します。」

于 2012-07-26T03:55:31.333 に答える