含まれているアプリケーションと同じ証明書で署名されていない場合、アプリケーションがサービスにバインドされないようにしようとしています。このために、要素を使用して (サービスを含むアプリケーションの) マニフェストで新しいアクセス許可を宣言し、示されているように新しいアクセス許可の保護レベルを Signature に設定しました。
<permission android:name="jp.co.abc.android.OMRSSettings.permission.Access"
android:protectionLevel="signature"></permission>
<uses-permission android:name="jp.co.abc.android.OMRSSettings.permission.Access"/>
次に、サービスのマニフェスト宣言で android:permission 属性を使用して、サービスにバインドするためにこの新しいアクセス許可が必要になるようにします。
<service android:name="jp.co.xyz.bluetooth.profile.TIPServer"
android:permission="jp.co.abc.android.OMRSSettings.permission.Access" >
<intent-filter>
<action android:name="jp.co.xyz.bluetooth.api.ICommonResultCallback" />
<action android:name="jp.co.xyz.bluetooth.api.ITimeServer" />
</intent-filter>
別のアプリケーションからこのサービスにアクセスしようとしています。この 2 番目のアプリケーションのマニフェストに、 を追加して<uses-permission android:name="jp.co.abc.android.OMRSSettings.permission.Access"/>
、最初のアプリケーションのサービスにバインドしようとします。
しかし、次の例外が発生します。
01-02 00:06:54.531: INFO/PowerManagerService(425): Start Light.setBrightness(), [20], [3]
01-02 00:06:56.473: INFO/PowerManagerService(425): Start Light.setBrightness(), [130], [3]
01-02 00:06:58.055: WARN/dalvikvm(4956): threadid=1: thread exiting with uncaught exception (group=0x40b70390)
01-02 00:06:58.055: WARN/ActivityManager(425): Permission Denial: Accessing service ComponentInfo{jp.co.abc.android.omrsettings/jp.co.xyz.bluetooth.profile.TIPServer} from pid=4956, uid=10158 requires jp.co.abc.android.OMRSSettings.permission.Access
01-02 00:06:58.065: ERROR/AndroidRuntime(4956): FATAL EXCEPTION: main
java.lang.SecurityException: Not allowed to bind to service Intent { act=jp.co.xyz.bluetooth.api.ITimeServer }
at android.app.ContextImpl.bindService(ContextImpl.java:1187)
at android.content.ContextWrapper.bindService(ContextWrapper.java:370)
at jp.co.abc.middleware.tip.LeTimeServerProfile.startTimeServer(LeTimeServerProfile.java:45)
at jp.co.abc.tip.TimeActivity.onClick(TimeActivity.java:49)
at android.view.View.performClick(View.java:3511)
at android.view.View$PerformClick.run(View.java:14133)
at android.os.Handler.handleCallback(Handler.java:605)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4507)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:787)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:554)
at dalvik.system.NativeStart.main(Native Method)
01-02 00:06:58.095: WARN/ActivityManager(425): Force finishing activity jp.co.abc.tip/.TimeActivity
<uses-permission android:name="jp.co.abc.android.OMRSSettings.permission.Access"/>
2 番目のアプリのマニフェストで正しく宣言しているのに、アクセス許可の問題がある理由を教えてください。
どんな助けでも大歓迎です。
編集
彼の回答で提案された修正レニクを含めるように変更されました。