安卓开发遇到的问题

246 阅读2分钟

1. 设置OptionMenu后不显示

问题: 在res目录下创建了menu的xml文件,并在onCreate()方法中实现了onCreateOptionsMenu方法后仍然不显示OptionMenu

解决方法: 查看AndroidManifest.xml文件中的android:theme属性的主题是否支持optionmenu,我这个一开始是不支持的,将主题更换为Theme.AppCompat.DayNight就解决了。

2. 运行Github项目失败,报错说AGP版本问题

参考链接

问题: 运行github上的项目时报了以下错误,这是我第二次遇到这个问题,之前遇到解决后没有记录,这次记录下来,下面是报错信息:

The project is using an incompatible version (AGP 8.4.0) of the Android Gradle plugin. Latest supported version is AGP 8.3.0

这个错误是因为项目正在使用的Android Gradle插件(AGP)版本与当前支持的版本不兼容。错误信息显示项目使用的是AGP 8.4.0版本,而当前支持的最高版本是AGP 8.3.0。

解决办法: 通过降级gradle文件夹下的libs.versions.toml 文件中的 agp 版本来解决,将其从8.4.0降级为8.3.0即可解决问题。

3. 在适配器Adapter中发送广播遇到的大坑

相关参考链接

相关内容: Android8.0及以上系统关于广播的规定:对隐式广播做了限定,如果targetSdkVersion >=26,在Manifest里面注册的Receiver可能无法接收到广播消息,需要指明广播接收器。如果是再同一个包内接收广播,在发送广播时需要添加广播接收器的完整包路径和全类路径名,查看ComponentName类的源码,该类的介绍上说明要设置接收类所在的包名和类名。可以参考下面的代码。

问题: 最近尝试在Adapter中发送广播,死活都不行,问题都没法找,不知道是发送的问题还是接收的问题。自己一开始的发送广播代码是人工智能提供的代码,如下所示:

 Intent intent = new Intent("com.example.calculator.MY_BROADCAST");
 //给intent加上下面的setComponent也不行
 // intent.setComponent(new ComponentName("com.example.calculator","com.example.calculator.MyBroadcastReceiver"));
 // 获取LocalBroadcastManager实例
 LocalBroadcastManager localBroadcastManager = LocalBroadcastManager.getInstance(v.getContext());
 // 发送广播
 localBroadcastManager.sendBroadcast(intent);
 ​

这段代码反正就是不行,即使给intent设置setComponent也不行。

解决办法: 最后在互联网上苦求无果,想起了之前了解的sendBroadcast()方法好像是Context提供的,然后又看见上面的LocalBroadcastManager中使用了一个v.getContext(),我就抱着试一试的心态把LocalBroadcastManager全删了,换成了以下代码:

 Intent intent = new Intent("com.example.calculator.MY_BROADCAST");
 ​
 // 指定广播接收器的组件名
 intent.setComponent(new ComponentName("com.example.calculator",
         "com.example.calculator.MyBroadcastReceiver"));
 ​
 v.getContext().sendBroadcast(intent);

然后就成功了,纯属碰巧啊,在这个问题上耽误了挺长时间的。