2009-11-17 15 views
68

मेरे एंड्रॉइड ऐप के पास फोन कॉल से कोई लेना देना नहीं है, लेकिन मैं देख रहा हूं कि जब मैं अपने टेस्ट डिवाइस पर डिबग बिल्ड स्थापित करता हूं तो उसे "फोन कॉल: फोन स्टेटस पढ़ने की आवश्यकता होती है और पहचान "अनुमतियां। (मैं AndroidManifest.xml में इसका कोई उल्लेख नहीं करता)।एंड्रॉइड अनुमतियां: फोन कॉल: फोन स्थिति और पहचान पढ़ें

मुझे न्यूनतम संभव अनुमतियां मिलनी होंगी, और आश्चर्य होगा कि अगर कोई जानता है कि इससे कैसे छुटकारा पाना है? मैंने उस भाग पर टिप्पणी की जहां मैं Build.MODEL, Build.VERSION.* आदि से कुछ सामान लॉग कर रहा था, आदि। मैंने उस हिस्से को भी टिप्पणी की जहां मैं परिदृश्य/चित्र अभिविन्यास का पता लगा रहा था कि यह "फोन स्थिति" हो सकता है। लेकिन उनमें से कोई भी उस अनुमति को हटाने की आवश्यकता नहीं लग रहा था।

मुझे यह बग रिपोर्ट मिली: http://code.google.com/p/android/issues/detail?id=4101 लेकिन यह बाजार से सही अनुमतियों के बारे में एक नोट के साथ काम करने के लिए लक्षित है लेकिन अन्यथा नहीं। क्या यह अन्य लोगों का अनुभव है? (मुझे इसका परीक्षण करने के लिए बाजार में प्रकाशित करना नफरत है।) अन्यथा, क्या किसी को पता है कि कोई एपीआई है, मैं कॉलिंग से बच सकता हूं जिससे ऐसा होगा कि मेरे ऐप को इस अनुमति की आवश्यकता नहीं है?

धन्यवाद!

उत्तर

89

(इस समस्या है और इसके लिए खोज में किसी और मामले किसी को भी चलाता है में अपने प्रश्न का उत्तर देना।)

एंड्रॉयड स्रोत में PackageParser.java में चारों ओर खुदाई, मुझे पता चला है कि सिस्टम स्वचालित रूप से आवंटित करेगा

android.permission.WRITE_EXTERNAL_STORAGE and 
android.permission.READ_PHONE_STATE 

किसी भी ऐप के लिए जो 4 से कम (डोनट) का लक्ष्य एसडीके संस्करण घोषित करता है। इसके लिए एक संगतता कारण होना चाहिए, शायद पुराने संस्करणों को लक्षित करने वाले ऐप्स मान सकते हैं कि उन्हें स्पष्ट रूप से घोषित किए बिना इन अनुमतियां थीं। तो, यदि आप इन अनुमतियों परोक्ष अपने अनुप्रयोग के लिए जोड़ा नहीं करना चाहते, AndroidManifest.xml

<uses-sdk android:minSdkVersion="4" android:targetSdkVersion="4" /> 

में निम्नलिखित सभी है की तरह एक अनुभाग जोड़ें।

मज़े, -माइक

+0

तो 1.5 में और इससे पहले कि आप कह रहे हैं कि ये अनुमतियां डिफ़ॉल्ट रूप से असाइन की गई हैं और इसे कम करने के लिए कोई सहारा नहीं है? – MattC

+0

यह मेरे जैसा दिखता है। अन्यथा, मुझे नहीं पता कि उन्हें इस तरह क्यों दिया जाएगा। मुझे लगता है कि एक परीक्षण के लिए, हम 1.5 एमुलेटर/डिवाइस पर 1.5 एप चलाने की कोशिश कर सकते हैं, किसी भी प्रयोग-अनुमति को सेट नहीं कर सकते हैं और देख सकते हैं कि यह संभव है (उदा।) एसडीकार्ड को लिखें। (यह 1.6 एमुलेटर/डिवाइस पर काम करता है, लेकिन केवल अंतर्निहित अतिरिक्त अनुमतियों के कारण। लक्ष्य एसडीकेवर्सन को 4 पर सेट करने से आप एसडीकार्ड को लिखने से पहले उपयोग-अनुमति भी जोड़ सकते हैं।) –

+1

मेरा 'एंड्रॉइड: minSdkVersion' 14 है लेकिन 'READ_PHONE_STATE' को स्पष्ट रूप से प्रदान किया गया है। मैं फेसबुक एसडीके और Google मैप्स v2 का उपयोग कर रहा हूं, क्या यह संभव है कि ये पुस्तकालय निहित अनुमति अनुरोध के लिए ज़िम्मेदार हैं? – wkarl

25

Android 1.6 बदलाव का: http://developer.android.com/sdk/android-1.6.html#api

WRITE_EXTERNAL_STORAGE: एक आवेदन बाहरी संग्रहण पर लिखने की अनुमति देता है। एपीआई लेवल 3 और निचले स्तर का उपयोग करने वाले अनुप्रयोगों को इस अनुमति को स्पष्ट रूप से दिया जाएगा (और यह उपयोगकर्ता के लिए दृश्यमान होगा); एपीआई स्तर 4 या उच्चतर का उपयोग कर स्पष्ट रूप से इस अनुमति का अनुरोध करना चाहिए।

लेकिन यह उनमें से केवल एक है। किसी कारण से आधिकारिक परिवर्तन लॉग में READ_PHONE_STATE के बारे में जानकारी गुम है। पूरी कहानी यहां साफ़ हो गई है: http://blogs.zdnet.com/Burnette/?p=1369&page=3

नई अनुमतियां। 1।6 कार्यक्रमों स्पष्ट रूप से अनुरोध करना होगा WRITE_EXTERNAL_STORAGE करने की अनुमति SD कार्ड की सामग्री को संशोधित करने में सक्षम हो, और वे स्पष्ट रूप से अनुरोध READ_PHONE_STATE अनुमति फ़ोन की स्थिति की जानकारी को पुनः प्राप्त करने में सक्षम हो करने में सक्षम होना चाहिए । ऐप्स पहले के संस्करणों को लक्षित करने से हमेशा इन अनुमतियों को पूरी तरह से अनुरोध करेगा।

तो जैसा कि आप देख सकते हैं, वहाँ एक एप्लिकेशन 1.5 पर लक्षित या जब 1.6 या उच्चतर चलाने वाले फ़ोन पर स्थापित उन अनुमतियों का अनुरोध नहीं करता पहले प्रकाशित करने के लिए कोई रास्ता नहीं है।

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