Ich versuche, Anwendungen zu verhindern, dass ein Service von Bindung, wenn sie nicht mit demselben Zertifikat wie die Container-Anwendung unterzeichnet. Dazu habe ich eine neue Berechtigung im Manifest (der Anwendung, die den Dienst enthält) deklariert, indem ich ein Element verwendet habe und den protectionLevel der neuen Berechtigung wie gezeigt auf Signatur gesetzt habe.Ausgabe android mit: Protectionlevel = „Signatur“
<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"/>
Dann in der Manifest-Erklärung für den Service, verwende ich ein Android: Erlaubnis Attribut so, dass diese neue Berechtigung für den Dienst zu binden, ist nicht erforderlich.
<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>
Ich versuche, von einer anderen Anwendung auf diesen Dienst zuzugreifen. Im Manifest dieser zweiten Anwendung füge ich die <uses-permission android:name="jp.co.abc.android.OMRSSettings.permission.Access"/>
hinzu und versuche, mich an den Dienst der ersten Anwendung zu binden.
Aber ich bekomme die folgende Ausnahme.
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
Kann jemand bitte lassen Sie mich wissen, warum ich die Erlaubnis Probleme haben, obwohl ich <uses-permission android:name="jp.co.abc.android.OMRSSettings.permission.Access"/>
im Manifest meiner zweiten App richtig erklären.
Jede Hilfe wird sehr geschätzt. in seiner Antwort
EDIT
Modified vorgeschlagen, um die Korrektur Lenik aufzunehmen.
können Sie an den Dienst binden, wenn Sie 'android entfernen: Protectionlevel =„Signatur“' aus dem Manifest? – lenik
Wenn ich android: protectionLevel = "signature" aus dem Manifest der ersten Anwendung entferne, kann ich den Dienst aus der zweiten Anwendung – user1400538