2012-03-27 11 views
5

में ब्रॉडकास्ट रिसीवर मैंने अपने फोन के लिए सिर्फ एक छोटा उपयोगिता ऐप लिखा था, जिसने कष्टप्रद वाहक को बूट करने पर खेला गया जिंगल प्रदान किया था। मैंने देखा कि ध्वनि बजाने से पहले फोन को चुप मोड में डाल दिया गया था, इसलिए मैंने बिजली पर चुप रहने और बूट पर ध्वनि बहाल करने के लिए यह छोटी उपयोगिता लिखी। यह जिंजरब्रेड पर गैलेक्सी एस 2 के लिए अच्छा काम करता है। पूरे कोड के दो वर्गों में है:आईसीएस

public class OnShutDownReceiver extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     AudioManager mgr=(AudioManager)context.getSystemService(Context.AUDIO_SERVICE); 
     mgr.setRingerMode(AudioManager.RINGER_MODE_SILENT); 
    } 

} 

और

public class OnBootReceiver extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     AudioManager mgr=(AudioManager)context.getSystemService(Context.AUDIO_SERVICE); 
     mgr.setRingerMode(AudioManager.RINGER_MODE_NORMAL); 
    } 
} 

प्रकट

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.nbt.hush" 
    android:versionCode="1" 
    android:versionName="1.0" > 
    <uses-sdk android:minSdkVersion="7" /> 
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> 
    <application 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" > 
     <receiver android:name=".OnBootReceiver" > 
      <intent-filter> 
       <action android:name="android.intent.action.BOOT_COMPLETED" /> 
      </intent-filter> 
     </receiver> 
     <receiver android:name=".OnShutDownReceiver" > 
      <intent-filter> 
       <action android:name="android.intent.action.ACTION_SHUTDOWN" /> 
      </intent-filter> 
     </receiver> 
    </application> 
</manifest> 

अब मेरे फोन मेरी सेवा प्रदाता के आधार आईसीएस में अपग्रेड कर दिया गया है, तो वह अब काम करता है। अगर मैं फोन को शांत करने से पहले चुप मोड में डालता हूं, तो जिंगल नहीं खेलता है। इसलिए मुझे संदेह है कि न तो रिसीवर ट्रिगर होता है। (मैंने रिसीवर में कुछ लॉग कोड डाला जो दिखाया नहीं गया था, लेकिन मुझे संदेह है कि समय के कारण यह जिंजरब्रेड के तहत प्रदर्शित नहीं किया जा सकता है।)

कोई सुझाव कृपया यह क्यों नहीं होगा अब और काम करो?

उत्तर

9

यदि आप पूरी तरह से अनइंस्टॉल करने और ऐप को पुनर्स्थापित करने के लिए घायल हो जाते हैं, तो समस्या यह है कि आपके पास कोई गतिविधि नहीं है।

एंड्रॉइड 3.1 से शुरू होने पर, एप्लिकेशन "बंद" स्थिति में स्थापित होते हैं, जहां कोई प्रसारण रिसीवर तब तक काम नहीं करेगा जब तक उपयोगकर्ता मैन्युअल रूप से कोई गतिविधि लॉन्च नहीं करता। यह एंटी-मैलवेयर चाल है। I blogged about this ~9 months ago

+0

मुझे लगता है कि मैं समझता हूं। तो अगर मैं एक टोस्ट या कुछ के साथ एक डमी गतिविधि जोड़ता हूं और इसे एक बार चलाता हूं, तो उसके बाद इसे काम करना चाहिए? – NickT

+0

@NickT: हाँ। यदि आप इस ऐप को वितरित कर रहे थे, तो आप एंड्रॉइड के पुराने संस्करणों पर घटक को अक्षम करने के लिए कुछ चाल का उपयोग कर सकते हैं, इसलिए यह लॉन्चर को अव्यवस्थित नहीं करता है। यहां एक नमूना प्रोजेक्ट है जहां मैं उस चाल का उपयोग करता हूं: https://github.com/commonsguy/cw-advandroid/tree/master/RemoteViews/Plugin – CommonsWare

+0

धन्यवाद, यह ठीक काम करता है, जब मैं फ़ोन चालू करता हूं तो मुझे सामाजिक शर्मिंदगी से बचाता है पर। (पीएस मैं पहली बार सवाल पोस्ट करते समय असली कोड से 'चुप' और 'सामान्य' गलत तरीके से चिपकाता था) – NickT

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