Android端展示MediaRoute列表的菜单不显示无报错如何解决
问题排查及解决方案
修正错误的R类导入
你代码中导入了系统android.R类,会导致后续读取菜单资源ID时引用系统资源而非你项目内定义的cast_options菜单资源,直接删除import android.R这行代码即可,IDE会自动导入你项目包名下的R类。检查菜单文件配置是否正确
你的res/menu/cast_options.xml需要正确配置MediaRoute菜单项的属性,示例正确配置如下:
<?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto"> <item android:id="@+id/media_route_menu_item" android:title="投屏" app:actionProviderClass="androidx.mediarouter.app.MediaRouteActionProvider" app:showAsAction="always" /> </menu>
注意必须配置app:showAsAction="always"才会直接显示在顶部菜单栏,否则会被收纳到溢出菜单中;actionProviderClass要使用androidx包下的正确路径。
确认Activity使用了AppCompat主题
你继承的是AppCompatActivity,必须使用AppCompat系列主题,否则菜单栏的加载会出现异常,检查AndroidManifest.xml中该Activity的theme属性配置为Theme.MaterialComponents.DayNight.NoActionBar或者其他AppCompat衍生主题。确认已添加正确依赖
检查模块级build.gradle文件中已添加MediaRouter依赖,示例:
dependencies { implementation "androidx.mediarouter:mediarouter:1.7.0" }
注意版本要和你项目其他androidx组件版本兼容。
- 修正已废弃的API调用
MenuItemCompat早已被废弃,直接调用MenuItem本身的方法即可,修改onCreateOptionsMenu中的对应代码:
val mediaRouteMenuItem = menu.findItem(R.id.media_route_menu_item) val mediaRouteActionProvider = mediaRouteMenuItem.actionProvider as MediaRouteActionProvider mediaRouteActionProvider.setRouteSelector(mSelector!!)
- 检查是否存在匹配的投屏设备
MediaRoute按钮默认逻辑是只有检测到符合你定义的MediaRouteSelector规则的可用设备时才会显示,如果当前局域网内没有可用的投屏/远程播放设备,按钮会自动隐藏,你可以开启一台支持投屏的设备(比如智能电视、Chromecast、模拟器的投屏模拟功能)处于同一局域网后再测试。
内容的提问来源于stack exchange,提问作者Mario Muresean
相关产品推荐
相关产品推荐

