Tôi đang cố gắng ngăn các ứng dụng liên kết với Dịch vụ nếu chúng không được ký bằng cùng một chứng chỉ như ứng dụng có chứa. Đối với điều này tôi đã tuyên bố một sự cho phép mới trong tệp kê khai (của ứng dụng có chứa Dịch vụ) bằng cách sử dụng một phần tử và thiết lập protectionLevel của quyền mới đối với Chữ ký như được hiển thị.Sự cố khi sử dụng android: protectionLevel = "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"/>
Sau đó, trong khai báo kê khai cho Dịch vụ, tôi sử dụng thuộc tính android: permission để yêu cầu quyền mới này liên kết với Dịch vụ.
<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>
Tôi cố truy cập dịch vụ này từ ứng dụng khác. Trong tệp kê khai của ứng dụng thứ hai này, tôi thêm <uses-permission android:name="jp.co.abc.android.OMRSSettings.permission.Access"/>
và cố gắng liên kết với dịch vụ của ứng dụng đầu tiên.
Nhưng tôi nhận được ngoại lệ sau.
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
Ai đó có thể xin vui lòng cho tôi biết tại sao tôi có vấn đề cho phép mặc dù tôi một cách chính xác tuyên bố <uses-permission android:name="jp.co.abc.android.OMRSSettings.permission.Access"/>
trong biểu hiện của ứng dụng thứ hai của tôi.
Bất kỳ giúp đỡ được nhiều đánh giá cao.
EDIT
Modified để bao gồm các lenik chỉnh gợi ý trong câu trả lời của mình.
bạn có thể liên kết với dịch vụ nếu bạn xóa 'android: protectionLevel =" signature "' khỏi tệp kê khai không? – lenik
Nếu tôi xóa android: protectionLevel = "signature" từ tệp kê khai của ứng dụng đầu tiên, tôi có thể liên kết với dịch vụ từ ứng dụng thứ hai – user1400538