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
}