为什么volume_changed_action为一个呼叫多次发射多次



volume_changed_action当我按下音量下或向上按钮时,对同一状态射击多次。

添加AndroidManifest.xml:

<receiver android:name=".VolumeSateReceiver">
           <intent-filter>
                     <actionandroid:name="android.media.VOLUME_CHANGED_ACTION" />
           </intent-filter>
       </receiver>

在卷中java:

public class VolumeSateReceiver extends BroadcastReceiver {
    Context pcontext;
    @Override
    public void onReceive(Context context, Intent intent) {
        pcontext = context;
        //check the intent something like:
        if (intent.getAction().equals("android.media.VOLUME_CHANGED_ACTION")) {
            int newVolume = intent.getIntExtra("android.media.EXTRA_VOLUME_STREAM_VALUE", 0);
            int oldVolume = intent.getIntExtra("android.media.EXTRA_PREV_VOLUME_STREAM_VALUE", 0);
               if (newVolume != oldVolume) {
                   //Toast.makeText(pcontext ,"newVolume" +newVolume + " oldVolume" + oldVolume, Toast.LENGTH_SHORT).show();
                   System.out.println("In onReceive" + "newVolume" +newVolume + " oldVolume" + oldVolume );
            }
        }
    }
}

这是一个古老的问题,我仍然会尝试为有兴趣的任何人提供答案。

这可能是因为Android一次更改了多个流的音量。

volume_changed_action上的文档清楚地指出它包括流类型:

 /**
 * @hide Broadcast intent when the volume for a particular stream type changes.
 * Includes the stream, the new volume and previous volumes
 *
 * @see #EXTRA_VOLUME_STREAM_TYPE
 * @see #EXTRA_VOLUME_STREAM_VALUE
 * @see #EXTRA_PREV_VOLUME_STREAM_VALUE
 */

Android可以,具体取决于哪种状态(呼叫,听音乐,...)手机是一个侧面按钮事件上的多个流。因此,您还必须过滤出您感兴趣的任何流,例如在您的接种功能中:

int stream = intent.getExtras().getInt(STREAMTYPE_EXTRA);
if ((stream == AudioManager.STREAM_MUSIC) {
  //do something when music stream changed
}

最新更新