有没有办法在安卓中只听音频音量变化?



我看到了一些类似问题的答案,主要是将ContentObserver视为其解决方案。在类似于以下行的某处:

getApplicationContext().getContentResolver().registerContentObserver(android.provider.Settings.System.CONTENT_URI, true, new ContentObserver(){...} );

但是注册CONTENT_URI的内容观察者也观察到许多其他变化。虽然,我们可以通过检查前一个卷和当前卷之间的差异来检测它是否是卷变化,这似乎也很昂贵,因为我们需要一个操作来获取当前卷和一个变量来存储我希望避免的上一个卷。

那么,有没有办法我们可以只听音频音量变化?

我得到了一个适用于 API 16 或更高版本的解决方案。MediaRouter可用于报告正在使用的媒体路由以及卷更改事件。

mediaRouter = (MediaRouter) owner.getContext().getSystemService(MEDIA_ROUTER_SERVICE);
setupCallback();
mediaRouter.addCallback(ROUTE_TYPE_USER, callback, CALLBACK_FLAG_UNFILTERED_EVENTS);

其中 setupCallback(( 如下所示:

private void setupCallback() {
callback = new MediaRouter.Callback() {
@Override
public void onRouteSelected(MediaRouter router, int type, MediaRouter.RouteInfo info) {
}
@Override
public void onRouteUnselected(MediaRouter router, int type, MediaRouter.RouteInfo info) {
}
@Override
public void onRouteAdded(MediaRouter router, MediaRouter.RouteInfo info) {
}
@Override
public void onRouteRemoved(MediaRouter router, MediaRouter.RouteInfo info) {
}
@Override
public void onRouteChanged(MediaRouter router, MediaRouter.RouteInfo info) {
}
@Override
public void onRouteGrouped(MediaRouter router, MediaRouter.RouteInfo info, MediaRouter.RouteGroup group, int index) {
}
@Override
public void onRouteUngrouped(MediaRouter router, MediaRouter.RouteInfo info, MediaRouter.RouteGroup group) {
}
@Override
public void onRouteVolumeChanged(MediaRouter router, MediaRouter.RouteInfo info) {
Log.d("onRouteVolumeChanged", info.getVolume());
}
};
}

您可以使用回调方法获取 VolumeChanged 事件onRouteVolumeChanged(MediaRouter router, MediaRouter.RouteInfo info)可以使用info.getVolume()检索卷的位置

最新更新