Android 机型适配问题整理

本文探讨了小米、华为、金立、Oppo等品牌手机上遇到的安卓应用适配问题,包括短信发送失败无回调、应用重复初始化、广播接收失败等,并提供了相应的解决方案。

form: http://blog.youkuaiyun.com/u010019468/article/details/72853663

小米手机适配

可以说小米手机对android系统定制得让人头痛,好好的应用跑在小米手机上多多少少会点问题。

 
  • 1
  • 2
  • 短信发送失败无回调 
    在发送短信时候,若系统拦截之后,若用户点击拒绝发送短信,这个时候发现一直收不到系统发送短信失败的广播回调,就会出现无回调不知道短信是否发送成功,这对于需要监听短信发送结果的要求是一个打击,用户往往很可能拒绝发送短信。`
    解决方案:使用安卓系统的权限管理进行权限,既能接受说明发送短信意图也能收到回调。这个时候系统在有权限申请之后,不会再默认拦截了。
  • 应用安装完成后打开应用出现初始化两次 
    是指在调用系统安装应用程序完成安装之后,若用户直接通过这个程序打开应用进入之后,用户按home键退出回到桌面应用程序列表,又点击该应用的icon重新进入该应用,却发现应用是重新打开,而不是继续上次离开的界面,按道理应用不应该重新初始化,后面经搜索发现这是个系统bug。 
    解决方案:在启动Activity onCreate方法中进行判断是否重复启动
 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        //防止重复创建的问题,第一次安装完成启动,和home键退出点击launcher icon启动会重复
        if (!isTaskRoot()
                && getIntent().hasCategory(Intent.CATEGORY_LAUNCHER)
                && getIntent().getAction() != null
                && getIntent().getAction().equals(Intent.ACTION_MAIN)) {

            finish();
            return;
        }
        }
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 静态注册广播收不到广播 
    在注册系统广播之后,收到广播是有条件,并不是每次都能够收到,在该品牌机型中要求:Receiver注册不能配置运行在非该应用包名下的进程中,否则收不到广播,广播只给不配置android:process的Receiver。同时要求是在当前进程应用没有退出的前提下,否则也收不到。 
    暂没有找到解决方案

华为荣耀

  • Toast不显示

    也是偶然发现在荣耀8机型上后台应用的toast不会被显示出来,只能当前在前台的应用TOAST提示。 
    解决方案:替换toast显示,改用其他方式,如dialog或者弹出activity界面。

  • 多网络下指定网络不成功 
    简单讲就是指wifi和移动网络同时开着的情况下,不能指定移动网络访问,详见接受说明移步到我的另一篇文章:http://blog.youkuaiyun.com/u010019468/article/details/72886859

金立

receiver查询不到

在错误日志中发现金立某些手机尽然对manfiest中组件receiver配置按Interfiter过滤查询结果显示没有找到改组件,这导致发现好多配置错误而导致功能失败,其实实际是存在。后来发现只要改变一个参数flag,且是被系统不推荐使用的参数配置,就没有问题了。

解决方案如下查询receiver是否配置,flag配置成其他的就不行。

List<ResolveInfo> lists = manager.queryBroadcastReceivers(intent,
                PackageManager.GET_DISABLED_COMPONENTS);
 
  • 1
  • 2

Oppo手机

  • 移动网络访问权限 
    在oppo R9s上发现oppo定制Android权限管理,还增加了对网络访问的权限管理,移动网络和wifi访问还弹出一层用户授权机制,真是一道障碍,这种情况下,当wifi和移动网络同开时,要走移动网络,而此时移动网络还没有来得及经用户授权允许,从导致访问不成功,oppo手机仅仅在移动网络下,第一次问询问用户是否允许,而wifi开着时,则不会。

权限适配问题

在Android 6.0之后新增了权限管理,google这样设计初衷是好的,但是万恶的厂商总喜欢擅自修改定制系统,导致留下一些头疼的适配问题给广大的Android 开发者,下面就讲讲权限适配时出现的问题。

 <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/>
 
  • 1

这个权限按照系统权限组分组在非危险权限组中,按照Android权限管理的意思,只要在Manifest中配置下就可以了,然而在实际使用中却发现在机型中出现了适配问题。

如华为6.0系统手机

java.lang.SecurityException: cn.com.chinatelecom.account.demo was not granted  either of these permissions: android.permission.CHANGE_NETWORK_STATE.
 
  • 1

只要在app中build.gradle中把 targetSdkVersion >=23就会出现这样的问题

  targetSdkVersion 23
 
  • 1

若要暂时性的解决这个问题就把targetSdkVersion <=22即可。 
但是这个反应了一种不合理,不按常理情况下,就一波草泥马在心中狂奔。

未完待续。。。




<think>好的,我现在需要回答用户关于Android跨大版本升级的问题。首先,我得先理解用户的具体需求是什么。他们可能正在考虑升级自己的Android设备,或者开发应用时需要处理不同版本的兼容性问题。接下来,我需要整理相关知识,确保信息准确,同时按照用户提供的系统级指令来格式化内容。 首先,Android跨大版本升级指的是设备从一个主要版本升级到另一个,比如从Android 10升级到Android 11。这可能涉及到系统底层的改动,比如API级别、权限变更、功能更新等。对于用户来说,这可能带来新功能,但也可能遇到兼容性问题或性能变化。 然后,我需要考虑用户可能关心的几个方面。比如升级的好处、可能遇到的问题、升级前的准备工作、升级后的注意事项,以及开发者如何处理这些升级带来的影响。此外,还需要提到一些实际案例或常见问题,比如厂商支持、升级失败的处理等。 接下来,我需要确保按照用户的格式要求,将所有行内数学表达式用$...$括起来,独立公式用$$...$$,并且正确使用LaTeX语法。不过在这个问题中,可能涉及到的数学公式不多,但如果有提到版本号或API级别,可能需要用行内格式,例如Android $11$(API $30$)。 在结构上,需要分点回答,帮助用户逐步理解问题。可能需要分成几个部分,比如升级的意义、常见问题、用户注意事项、开发者适配建议等。同时要使用中文,保持语言清晰,避免专业术语过多,必要时解释术语。 现在需要检查是否有遗漏的重要点。例如,不同厂商对升级的支持差异,比如Pixel设备通常能更快获得更新,而其他厂商可能延迟或停止支持旧设备。此外,升级可能带来的存储空间需求,电池寿命变化,以及用户数据备份的重要性。 还要考虑开发者的角度,比如targetSdkVersion的调整,新API的兼容性处理,使用Jetpack库来简化适配工作。可能还需要提到Android的兼容性框架,如AppCompat,以及如何处理权限变更,例如Android 11中的分区存储。 最后,需要确保回答真实可靠,引用官方文档或常见实践,比如推荐用户备份数据,查看厂商通知,开发者测试新版本等。同时,结构要清晰,每个部分有小标题,分点列出,便于阅读。 可能还需要举一些例子,比如从Android 10到11的主要变化,如对话通知、5G支持、隐私改进等,以及这些变化对用户和应用的影响。同时,提醒用户在升级后检查应用是否正常运行,必要时联系开发者更新应用。 总结一下,回答需要涵盖用户和开发者两个视角,说明升级的好处和挑战,提供实际操作建议,并确保格式正确,符合用户的要求。</think>### Android 跨大版本升级问题解析 #### 1. **升级的意义与挑战** Android 跨大版本升级(如从 Android $10$(API $29$)升级到 Android $11$(API $30$))通常带来以下变化: - **新功能**:系统优化、隐私增强、硬件支持(如 5G)。 - **API 变更**:新增或废弃接口,可能影响应用兼容性。 - **行为变更**:系统限制调整(如后台定位权限、文件存储规则)。 **挑战**: - **兼容性问题**:旧应用可能无法适配新 API 或权限模型。 - **厂商适配延迟**:非 Google 设备需等待厂商定制系统(如 MIUI、One UI)。 - **升级失败风险**:设备硬件限制或存储不足可能导致升级异常。 --- #### 2. **用户视角:升级注意事项** 1. **升级前准备**: - **备份数据**:防止升级失败导致数据丢失。 - **检查设备支持**:部分旧设备可能无法升级(如 3 年前机型)。 - **预留空间**:系统升级通常需要 $1\text{GB}$ 以上存储。 2. **升级后问题**: - **应用闪退**:需更新至适配新版本的应用。 - **权限重置**:部分权限(如通知、存储)需重新授权。 - **续航变化**:新系统可能优化或增加电池消耗。 --- #### 3. **开发者视角:适配关键点** 1. **API 兼容性**: - 设置 `targetSdkVersion` 至最新版本,逐步适配新特性。 - 使用 `@RequiresApi` 注解处理版本差异: ```java if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { // Android 11+ 专用代码 } ``` 2. **行为变更处理**: - **存储限制**:Android $11$ 强制启用分区存储(Scoped Storage),需改用 `MediaStore` 或 `SAF` 访问文件。 - **权限变更**:后台定位需动态申请 `ACCESS_BACKGROUND_LOCATION`。 3. **测试与调试**: - 使用 Android Studio 的 **多版本模拟器** 测试兼容性。 - 分析 `Logcat` 日志,定位因 API 废弃导致的崩溃(如 `SecurityException`)。 --- #### 4. **厂商与升级支持** - **Google Pixel 系列**:优先获得升级,更新周期通常为 $3$ 年。 - **第三方厂商**:升级速度取决于厂商策略(如三星承诺为旗舰机提供 $4$ 年安全更新)。 - **社区解决方案**:通过刷入第三方 ROM(如 LineageOS)延长设备生命周期。 --- #### 5. **故障处理** - **升级卡顿**:重启进入安全模式,清理缓存分区。 - **应用崩溃**:卸载更新或等待开发者适配。 - **回滚系统**:需解锁 Bootloader 并刷入旧版本固件(**可能导致数据丢失**)。 --- #### 6. **总结建议** - **用户**:升级前确认设备支持,备份数据,关注厂商公告。 - **开发者**:优先使用 Jetpack 库(如 `ActivityResultContract` 简化权限请求),遵循 [Android 兼容性指南](https://developer.android.com/guide)。 通过系统适配与谨慎操作,可最大限度降低跨版本升级的风险。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值