2012-03-27 5 views
5

Sadece telefonum için küçük bir yardımcı program yazmıştım, bu da can sıkıcı taşıyıcıyı durdurulan jingle'ı durdurdu. Telefonu kapatmadan önce telefonu sessiz kipte geçirdiğimde sesin oynamadıklarını fark ettim, bu yüzden bu küçük yardımcı programın gücü keserken sessiz kalması ve önyükleme sesini geri yükledim. Bu Gingerbread bir Galaxy S2 için iyi çalıştı. tüm kod iki sınıf içinde:ICS'de BroadcastReceivers'lar

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); 
    } 

} 

ve

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); 
    } 
} 

tezahür

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

Şimdi benim telefon benim taşıyıcı tarafından ICS yükseltildi olduğunu, artık çalışır. Telefonu kapatmadan önce sessiz moda sokarsam jingle çalmaz. Bu nedenle, hiçbir alıcının tetiklenmediğinden şüpheleniyorum. (Ben görünmüyordu alıcılarda bazı günlük kodu koydum ama Gingerbread altında görüntülenmemiş olabilir zamanlama nedeniyle şüpheleniyorum.)

Herhangi bir öneri neden olmasın lütfen artık çalışmak

cevap

9

Uygulamayı tamamen kaldırıp yeniden yüklerseniz sorun, etkinliğinizin olmamasıdır.

Android 3.1'den başlayarak, uygulamalar kullanıcı tarafından bir etkinlik başlatılıncaya kadar yayın alıcılarının çalışmadığı "durdurulmuş" bir durumda yüklenir. Bu bir anti-malware hareketi. I blogged about this ~9 months ago.

+0

Sanırım anlıyorum. Yani eğer bir Toast veya bir şey ile kukla bir aktivite ekler ve sadece bir kez çalıştırırsam, daha sonra çalışmalı mıyım? – NickT

+0

@NickT: Evet. Bu uygulamayı dağıttığınız takdirde, Android'in önceki sürümlerinde bileşeni devre dışı bırakmak için bazı hileler kullanabilirsiniz, bu nedenle başlatıcıyı karıştırmaz. İşte bu hile kullandığım örnek bir proje: https://github.com/commonsguy/cw-advandroid/tree/master/RemoteViews/Plugin – CommonsWare

+0

Teşekkürler, bu iyi çalışıyor, telefonu açtığımda beni sosyal utançtan kurtarıyor üzerinde. (S.S.Önce ilk kez gönderdiğimde gerçek koddan 'sessiz' ve 'normal' yanlış bir şekilde kesip yapıştırdım.) – NickT