2012-03-27 4 views
5

Я написал небольшое приложение-приложение только для своего телефона, в котором остановился раздражающий несущий, обеспечивающий звон, который играл при загрузке. Я заметил, что звук не воспроизводится, если я включил телефон в тихий режим, прежде чем отключать питание, поэтому я написал эту небольшую утилиту, чтобы отключить питание и восстановить звук при загрузке. Это хорошо работало для Galaxy S2 на Gingerbread. не весь код находится в двух классах:BroadcastReceivers in ICS

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> 

Теперь мой телефон был обновлен до ICS от моего оператора, он больше не работает. Если я включил телефон в бесшумном режиме, он не будет играть. Поэтому я подозреваю, что ни один приемник не срабатывает. (Я сделал несколько кодов журналов в приемниках, которые не отображались, но я подозреваю, что из-за таймингов он, возможно, не был отображен в Gingerbread.)

Любые предложения, пожалуйста, почему это не будет работать больше?

ответ

9

Если вы полностью удалили и переустановили приложение, проблема в том, что у вас нет активности.

Начиная с Android 3.1, приложения устанавливаются в состоянии «остановлено», когда широковещательные приемники не будут работать до тех пор, пока пользователь не начнет вручную запускать действие. Это движение против вредоносного ПО. I blogged about this ~9 months ago.

+0

думаю есть. Итак, если я добавляю фиктивную работу с помощью Toast или что-то еще и запускаю ее только один раз, она должна работать после этого? – NickT

+0

@NickT: Да. Если вы распространяете это приложение, вы можете использовать некоторые трюки, чтобы отключить компонент в более ранних версиях Android, поэтому он не загромождает пусковую установку. Вот пример проекта, в котором я использую этот трюк: https://github.com/commonsguy/cw-advandroid/tree/master/RemoteViews/Plugin – CommonsWare

+0

Спасибо, что сейчас прекрасно работает, спасает меня от социального смущения, когда я поворачиваю телефон на. (P.S. Я бы вырезал и приклеил «тихий» и «нормальный» неправильный путь от реального кода, когда я впервые разместил вопрос) – NickT

Смежные вопросы