2

com.example.library.http.RestService というサービスを含む com.example.library というライブラリがあります。ライブラリのマニフェストには、次の要素が含まれています。

<uses-permission android:name="com.example.library.permission.REST_PERMISSION" />

<permission
    android:name="com.example.library.permission.REST_PERMISSION"
    android:protectionLevel="signature" />

<application ...>
    <service
        android:name="com.example.library.http.RestService"
        android:enabled="true"
        android:permission="com.example.library.permission.REST_PERMISSION" 
        android:exported="true" >
        <intent-filter>
            <action android:name="com.example.library.LAUNCH_REST_SERVICE" />
        </intent-filter>
    </service>
</application>

com.example.testapp というアプリでそのライブラリを使用しています。TestApp のマニフェストは、上記のライブラリとまったく同じ要素を繰り返します。これは、 4.0.3を実行しているエミュレーターと4.2.2を実行している nexus 4 では正常に動作しますが、 2.3.5を実行している HTC Wildfire S で使用しようとすると、サービスを起動しようとした瞬間に失敗します。ただし、次の例外があります。

java.lang.SecurityException: Not allowed to start service Intent 
{ act=com.example.library.LAUNCH_REST_SERVICE pkg=com.example.testapp (has extras) }
without permission com.example.library.permission.REST_PERMISSION

次のコードでサービスを起動しています。

Intent intent = new Intent();
intent.setAction( "com.example.library.LAUNCH_REST_SERVICE" );
intent.setPackage( "com.example.testapp" );

[setting some extras]

startService( intent );

私は助けを求めて Web を探し回っており、関連する Stack Overflow の質問をすべて読みましたが、不足しているものは何も見つかりません。

4

1 に答える 1

0

そのため、2.2 および 2.3 エミュレーターで動作した後、Wildfire S を工場出荷時の状態にリセットしてみました。現在は正常に動作しています。

これは、次の問題に似ていると思います:インテント カスタム アクセス許可が機能しない- アプリのパッケージの名前を変更していれば、おそらく機能していたはずです。

于 2013-06-28T16:26:33.627 に答える