【问题标题】:BroadcastReceivers in ICSICS 中的广播接收器
【发布时间】:2012-03-27 23:26:51
【问题描述】:

我为我的手机编写了一个小型实用应用程序,它阻止了恼人的运营商提供的启动时播放的叮当声。我注意到如果我在关机前将手机置于静音模式,声音就不会播放,所以我写了这个小工具来在关机时静音并在开机时恢复声音。这适用于 Gingerbread 上的 Galaxy S2。整个代码分为两个类:

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 下。)

请对为什么它不再起作用有任何建议吗?

【问题讨论】:

    标签: android broadcastreceiver android-4.0-ice-cream-sandwich


    【解决方案1】:

    如果您完全卸载并重新安装该应用程序,问题是您没有任何活动。

    从 Android 3.1 开始,应用程序安装在“停止”状态,在此状态下广播接收器将无法工作,直到用户手动启动 Activity。这是一个反恶意软件的举措。 I blogged about this ~9 months ago.

    【讨论】:

    • 我想我明白了。因此,如果我添加一个带有 Toast 或其他东西的虚拟活动并只运行一次,它应该在之后工作吗?
    • @NickT:是的。如果你正在分发这个应用程序,你可以使用一些技巧来禁用早期版本的 Android 上的组件,这样它就不会弄乱启动器。这是我使用该技巧的示例项目:github.com/commonsguy/cw-advandroid/tree/master/RemoteViews/…
    • 谢谢,现在很好用,让我在打开手机时免于社交尴尬。 (附言:当我第一次发布问题时,我从真实代码中以错误的方式剪切并粘贴了“静音”和“正常”)
    • 预加载的应用程序也会出现这个问题吗?
    • @SaneeshCS:如果“预加载”是指“在设备发货前安装”,设备制造商应该有解决这个问题的方法,但这超出了我的专业领域。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多