2016-01-25 10 views
15

एक साधारण लक्ष्य प्राप्त करने के लिए BroadcastReceiver का उपयोग करके एक साधारण टूल पर विचार करें। क्योंकि यह अन्य एप्लिकेशन द्वारा नहीं किया जाना चाहिए, यह signature या signatureOrSystem के ProtectionLevel के साथ एक अनुमति परिभाषित करता है:ब्रॉडकास्ट रिसीवर एडीबी शैल

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="any.test"> 

    <permission 
     android:name="any.test.PERMISSION" 
     android:protectionLevel="signatureOrSystem" /> 

    <application android:label="AnyTest"> 
     <receiver 
      android:name=".Receiver" 
      android:exported="true" 
      android:permission="any.test.PERMISSION" /> 
    </application> 
</manifest> 

अब मैं के माध्यम से

adb shell am broadcast -n any.test/.Receiver 
से

प्रसारण भेज कर इस परीक्षण करना चाहते हैं मेरे कंप्यूटर। हालांकि यह एक एमुलेटर पर पूरी तरह से ठीक काम करता है, यह अनुमति सेट होने पर वास्तविक डिवाइस पर बिल्कुल काम नहीं करता है। अगर अनुमति सेट नहीं है, तो सबकुछ इरादे के अनुसार काम करता है।

तो मैं अनुमति को परिभाषित या अनुदान कैसे दे सकता हूं ताकि मैं इसे वास्तविक डिवाइस पर ADB के साथ परीक्षण कर सकूं?

मैं इस निर्यात रिसीवर डिबग मोड में थोड़ा और अधिक सुरक्षित बनाना चाहते हैं, इसलिए यदि वहाँ ADB उपयोग या करने के लिए एक रन-टाइम परीक्षण के लिए एक विशेष अनुमति है केवल अनुमति देते हैं मैं Receiver.onReceive(Context, Intent) में लागू कर सकते ADB से कॉल, यह भी मदद मिलेगी । रिसीवर को ADB और एक ही समय में अन्य ऐप्स के लिए काम नहीं करना पड़ता है।

+1

मुझे यह कथन नहीं समझता है: "... काम नहीं करता है ... जब तक अनुमति सेट हो जाती है। इसके बिना सब ठीक काम करता है ..." क्या आप कह रहे हैं कि यह ** ** बिना काम करता है अनुमति है और आप इसे काम नहीं करना चाहते हैं? – muratgu

उत्तर

3

एक रूट खोल किसी भी प्रसारण द्वारा किसी भी प्रसारण द्वारा संरक्षित भेज सकता है।
एक सामान्य खोल को भी बहुत सारी अनुमतियां दी गई हैं, इस फ़ाइल को एओएसपी सॉस कोड में देखें: frameworks\base\packages\Shell\AndroidManifest.xml

इस फ़ाइल में एक अनुमति के साथ अपने any.test.PERMISSION को बदलें कि सुरक्षा लेवल signatureOrSystem है, जैसे android.permission.REAL_GET_TASKS। उसके बाद, आप इस रिसीवर को खोल में प्रसारण भेज सकते हैं, लेकिन अन्य 3 ऐप नहीं कर सकता है।

+0

इस फ़ाइल में एक अनुमति के साथ अपने 'any.test.PERMISSION' को बदलें कि सुरक्षा लेवल' signatureOrSystem' है, जैसे 'android.permission.REAL_GET_TASKS'। उसके बाद, आप इस रिसीवर को खोल में प्रसारण भेज सकते हैं, लेकिन अन्य 3 ऐप नहीं कर सकता है। – Swing

+0

हालांकि 'शैल' पैकेज एंड्रॉइड 4.3 के साथ पेश किया गया था। – tynn

+0

@tynn: क्या आप कृपया सटीक खोल कमांड प्रदान कर सकते हैं जिसका उपयोग आपने अपनी समस्या का समाधान किया था? –

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