振铃模式更改监听器广播接收器?

Posted

技术标签:

【中文标题】振铃模式更改监听器广播接收器?【英文标题】:Ringer mode change listener Broadcast receiver? 【发布时间】:2011-11-20 23:43:29 【问题描述】:
AudioManager am = (AudioManager)getSystemService(Context.AUDIO_SERVICE);

switch (am.getRingerMode()) 
    case AudioManager.RINGER_MODE_SILENT:
        Log.i("MyApp","Silent mode");
    break;

    case AudioManager.RINGER_MODE_VIBRATE:
        Log.i("MyApp","Vibrate mode");
    break;

    case AudioManager.RINGER_MODE_NORMAL:
        Log.i("MyApp","Normal mode");
    break;

从上面的代码我可以得到振铃模式。我想做的是听铃声模式的变化并调用一个函数。

有人告诉我,我可以注册 AudioManager。 RINGER_MODE_CHANGED_ACTION 并在广播接收器的 onReceive 方法中监听更改意图。听起来很清楚。但我是android新手,真的不知道怎么写。有没有人可以只写一段代码并展示它是如何工作的而不是说使用这个或那个:) 谢谢

【问题讨论】:

【参考方案1】:

在您要处理广播的ActivityServiceonCreate() 方法中使用以下代码:

      BroadcastReceiver receiver=new BroadcastReceiver()
          @Override
          public void onReceive(Context context, Intent intent) 
               //code...
          
      ;
      IntentFilter filter=new IntentFilter(
                      AudioManager.RINGER_MODE_CHANGED_ACTION);
      registerReceiver(receiver,filter);

【讨论】:

非常感谢。这就是答案。但我让它在活动中工作,但我无法在服务类中工作。如果你能举一个在服务中工作的例子。那也很好。再次非常感谢您。 我不确定。当我将您发送的代码放入活动的 onCreate 方法和 onReceive 中时,我可以通过调用方法将数据发送到服务器。但是,当我将代码放在 Service 类的 onCreate 方法中时。并运行我在服务器上看不到任何东西。我也在清单文件中注册了该服务。基本上,我想做的是即使应用程序被杀死,它也能够监听振铃模式并将数据发送到服务器。如果我想让它一直听,我想我不应该把它放在一个活动中。对吗? 不是真的.. 我希望它在应用程序运行时运行。你是对的,它没有策略。我使用这个 startService(new Intent(this, MyService.class));在我的主要活动中,它完美无缺。有没有办法通过手机启动来运行服务? 看看这个androidcompetencycenter.com/2009/06/start-service-at-boot 你太棒了。这正是我所需要的。非常感谢。干杯【参考方案2】:

另一种解决方案是在 Manifest 中添加带有操作的接收器:

<receiver android:name=".receivers.RingerModeStateChangeReceiver" >
    <intent-filter>
        <action android:name="android.media.RINGER_MODE_CHANGED" />
    </intent-filter>
</receiver>

你的类 RingerModeStateChangeReceiver 应该扩展 BroadcastReceiver。

【讨论】:

【参考方案3】:

这是 Kotlin 的更新版本。将其置于您的 onCreate() 生命周期下。

this.activity?.registerReceiver(object : BroadcastReceiver() 
        override fun onReceive(context: Context, intent: Intent) 
            if (intent.action == AudioManager.RINGER_MODE_CHANGED_ACTION) 
                // Set Player Volume
            
        
    , IntentFilter(AudioManager.RINGER_MODE_CHANGED_ACTION))

【讨论】:

以上是关于振铃模式更改监听器广播接收器?的主要内容,如果未能解决你的问题,请参考以下文章

如何将结果数据从广播接收器发送到活动

从广播接收器更改片段

Android Broadcast Receiver (广播接收者)

监听特定端口时接收广播数据包

用于更改日期的广播接收器

广播接收者案例_sd卡状态监听