12

एंड्रॉयड एन आप सेटिंग्स में अपने ऐप के पृष्ठ में तुम्हारा एक गतिविधि लिंक करने देता है। android.intent.action.APPLICATION_PREFERENCES के लिए बस <intent-filter> जोड़ें। एंड्रॉइड एन के सेटिंग्स ऐप आपके ऐप में गतिविधि की तलाश करेगा कि में <intent-filter> है। सेटिंग्स एक मिलते हैं तो वह सेटिंग में अपने ऐप के पृष्ठ के लिए एक गियर आइकन जोड़ना होगा, और उपयोगकर्ता गियर टैप करता है, तो वे आपके निर्दिष्ट गतिविधि के लिए ले जाया जाएगा।सेटिंग ऐप एक ऐप की गैर-निर्यातित गतिविधि कैसे शुरू कर सकता है?

मैं सुरक्षा को लेकर चिंतित था, और इसलिए मैं an issue दायर, हम android:permission साथ इस्तेमाल कर सकते हैं सेटिंग्स हमारे गतिविधि शुरू करने के लिए अनुमति देने के लिए किसी अनुमति की तलाश में है, लेकिन अन्य एप्लिकेशन हमारे गतिविधि शुरू करने की अनुमति नहीं है (जैसे, WRITE_SECURE_SETTINGS)।

cketti तो उस you could just mark the activity as not exported, via android:exported="false" बताया। मेरे आश्चर्य की बात है, यह काम करता है।

कैसे सेटिंग एप्लिकेशन एक गतिविधि है कि के रूप में निर्यात नहीं चिह्नित है शुरू कर सकते हैं?

मैं निश्चित रूप से वहाँ एक अनुमति है कि इस को नियंत्रित करता जा रहा है देख सकते हैं। हालांकि, सेटिंग ऐप के मेनिफेस्ट (master branch, n-developer-preview-5 शाखा) का एक त्वरित पठन कुछ भी स्पष्ट नहीं हुआ।

तो:

  • वहाँ एक अनुमति है कि एक एप्लिकेशन को अन्य एप्लिकेशन की एक गैर निर्यात घटक शुरू करने के लिए अनुमति देता है है? यदि हां, तो यह कौन है?

  • यदि नहीं, तो कैसे सेटिंग्स इस बंद खींच रहा है?

+0

आपने यहां कुछ ऐसा उत्तर दिया: http://stackoverflow.com/questions/13892721/activity-exported-false-listed-in-activity-chooser – Shaishav

+0

@Sishavav: हालांकि यह संबंधित विषय पर है (' '), यह उस प्रश्न को संबोधित नहीं करता है जिसे मैंने यहां देखा था। – CommonsWare

उत्तर

7

मुझे लगता है कि मैनिफेस्ट में कुछ भी नहीं है जो ऐप को निर्यात की गई गतिविधियों को कॉल करने की अनुमति देता है। मेरा मानना ​​है कि इसे पूरा करने के तरीके को सेटिंग एप्लिकेशन के लिए Android.mk फ़ाइल में LOCAL_PRIVILEGED_MODULE := true सेट करना है। यह ध्वज एक अनुप्रयोग प्रणाली स्तर की अनुमति देगा और इसे ओएस संकलन समय के दौरान system/priv-app/ निर्देशिका में रखेगा।

यदि आप checkComponentPermission विधि के लिए frameworks/base/core/java/android/app/ActivityManager.java पर देखते हैं तो आप देख सकते हैं कि यदि यूआईडी सिस्टम का है, तो निर्यात की अनुमति के बावजूद घटक अनुमति दी जाती है।

+0

मैं इस अवधारणा को खरीदता हूं कि यह सेटिंग ऐप के यूआईडी पर आधारित है। मुझे 100% आश्वस्त नहीं है कि 'चेककंपोनेंट पैरामिशन()' वह स्थान है जहां दृढ़ संकल्प किया जाता है, क्योंकि मैं उम्मीद नहीं करता कि एक एसडीके कक्षा यह तय करेगी कि आपको गतिविधि शुरू करने की अनुमति है या नहीं। – CommonsWare

+0

@ कॉमन्सवेयर क्या मतलब है - 'मैं एक एसडीके कक्षा से यह तय नहीं करूँगा कि आपको गतिविधि शुरू करने की अनुमति है या नहीं? इसके बजाय आप क्या उम्मीद करेंगे? – Vikram

+0

@ विक्रम: मुझे उम्मीद है कि यह सिस्टम सेवा ('गतिविधि प्रबंधक सेवा '?) या उस प्रभाव से कुछ के अंदर निर्धारित किया जाएगा। अब, यह संभव है कि वे एसडीके में मौजूद 'चेककंपोनेंट पैरामिशन()' विधि का उपयोग करें। – CommonsWare

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