2012-11-27 6 views
5

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.

+0

können Sie an den Dienst binden, wenn Sie 'android entfernen: Protectionlevel =„Signatur“' aus dem Manifest? – lenik

+0

Wenn ich android: protectionLevel = "signature" aus dem Manifest der ersten Anwendung entferne, kann ich den Dienst aus der zweiten Anwendung – user1400538

Antwort

3

Ihr Wunsch-Erlaubnis ist:

<permission android:name="jp.co.abc.android.OMRSSettings.permission.Access" 

und Ihre Log sagt:

requires jp.co.abc.android.OMRSettings.permission.Access 

Sie sollten in beiden Fällen zu verwenden "OMRS" oder "OMR" entscheiden, ein "S" ist extra .

+1

binden, die Sie bei Bedarf herunterladen können. Ich änderte die Paketnamen aus Sicherheitsgründen und es falsch geschrieben I – user1400538

+0

@ user1400538 ich über Abstimmung sich nicht, könnte Ihr bitte bearbeiten Sie Ihre Frage Rechtschreibfehler zu korrigieren? – lenik

5

Neben Lenik-Lösung von nicht Ihre Erlaubnis Namen vermasseln, mit Ihrer aktuellen Implementierung Angelegenheiten Installationsreihenfolge. Sie müssen zuerst den Dienst installieren (wobei <permission> definiert ist), bevor Sie den Client installieren. Andernfalls erhält der Client die Berechtigung nicht, da Android eine <uses-permission> für eine Berechtigung ignoriert, die es nicht erkennt. Wenn Sie setzen das <permission> Element in beiden Anwendungen (mit den gleichen Werten), die Installationsreihenfolge keine Rolle mehr spielen.

+0

Im Szenario erklärt in meiner Frage, wenn der Dienst (wo die definiert ist) ein Teil der Anwendung, die als Teil des Custom ROM eingebaut ist, auf die ich Zugriff haben und den Client ist die Anwendung, die ich im Telefon installieren als eine normale Android-Anwendung, wird dies das oben erwähnte Genehmigungsproblem geben? – user1400538