2012-11-27 16 views
5

मैं अनुप्रयोगों को बाध्यकारी से रोकने से रोकने की कोशिश कर रहा हूं यदि वे एक ही प्रमाणपत्र के साथ उसी प्रमाणपत्र के साथ हस्ताक्षरित नहीं हैं। इसके लिए मैंने एक तत्व का उपयोग करके मैनिफेस्ट (सेवा युक्त एप्लिकेशन के आवेदन) में एक नई अनुमति घोषित की है और सुरक्षा को सेट किया है जैसा कि दिखाए गए हस्ताक्षर के लिए नई अनुमति का स्तर है। अनुमति विशेषता तो यह है कि इस नए अनुमति सेवा करने के लिए बाध्य करने की आवश्यकता है:एंड्रॉइड का उपयोग कर समस्या: सुरक्षाLevel = "हस्ताक्षर"

<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"/> 

फिर, सेवा के लिए प्रकट घोषणा में, मैं एक एंड्रॉयड का उपयोग करें।

<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> 

मैं इस सेवा को किसी अन्य एप्लिकेशन से एक्सेस करने का प्रयास करता हूं। इस दूसरे एप्लिकेशन के मैनिफेस्ट में, मैं <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"/> घोषित तो कृपया कर सकते हैं।

किसी भी मदद की बहुत सराहना की जाती है।

संपादित

सुधार lenik शामिल करने के लिए संशोधित उसके जवाब में सुझाव दिया।

+0

यदि आप 'एंड्रॉइड: सुरक्षाLevel = "हस्ताक्षर" को प्रकट करते हैं तो आप सेवा से जुड़ सकते हैं? – lenik

+0

यदि मैं एंड्रॉइड को हटाता हूं: सुरक्षा अनुप्रयोग: पहले आवेदन के मैनिफेस्ट से "हस्ताक्षर", मैं दूसरे एप्लिकेशन – user1400538

उत्तर

3

आपके अनुरोध अनुमति है:

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

और अपनी लॉग कहते हैं:

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

आप "OMRS" या "ओएमआर" दोनों ही मामलों में, उपयोग करने के लिए एक "एस" अतिरिक्त है तय करना चाहिए ।

+1

से सेवा से जुड़ सकता हूं, यदि आवश्यक हो तो आप डाउनवोट कर सकते हैं। मैंने सुरक्षा कारणों से पैकेज नामों को संशोधित किया और वहां मैंने – user1400538

+0

@ user1400538 को गलत तरीके से मिस्पाल्ट किया, मुझे वोटिंग की परवाह नहीं है, क्या आप कृपया वर्तनी की गलतियों को सही करने के लिए अपना प्रश्न संपादित कर सकते हैं? – lenik

5

आपके वर्तमान कार्यान्वयन के साथ, आपके वर्तमान कार्यान्वयन के साथ, आपके अनुमति नामों को गड़बड़ न करने के लेनिक के समाधान के अतिरिक्त, स्थापना आदेश महत्वपूर्ण है। क्लाइंट इंस्टॉल करने से पहले, आपको पहले सेवा इंस्टॉल करना होगा (जहां <permission> परिभाषित किया गया है)। अन्यथा, क्लाइंट को अनुमति प्राप्त नहीं होगी, क्योंकि एंड्रॉइड <uses-permission> को उस अनुमति के लिए अनदेखा कर देगा जिसे वह पहचान नहीं पा रहा है। यदि आप ऐप्स (उसी मान के साथ) में <permission> तत्व डालते हैं, तो स्थापना आदेश अब कोई फर्क नहीं पड़ता।

+0

परिदृश्य में मेरे प्रश्न में बताया गया है, यदि सेवा (जहां परिभाषित किया गया है) उस एप्लिकेशन का एक हिस्सा है जो कस्टम रोम के हिस्से के रूप में बनाया गया है जिसके लिए मेरे पास पहुंच है और ग्राहक वह एप्लिकेशन है जिसे मैं फोन में इंस्टॉल करता हूं एक सामान्य एंड्रॉइड एप्लिकेशन के रूप में, क्या यह उपरोक्त वर्णित अनुमति समस्या देगा? – user1400538

संबंधित मुद्दे