记上架GooglePlay提升targetSdkVersion导致的适配问题

升了targetSdkVersion,出现了一些适配的问题,还有权限的问题,实在是不想升,但是没办法Google爸爸要求必须要升,硬着头皮上了。

我主要是面临两个方面的问题:
(1)权限的动态申请
(2)应用升级、拍照获取图片异常(这两个是同一个问题)

对于权限问题,相对来说还是比较简单的,我是采用了RxPermissions来做的。对于运行时权限有兴趣的可以去了解一下。主要是说第二个问题。

原来的话是定义一个文件地址,然后通过Uri.fromFile(cameraFile)就可以获取到相应的Uri,但是7.0往上,发现崩了。。。查了一下资料,原来是为了安全起见,面向 Android 7.0 的应用,Android 框架执行的 StrictMode API 政策禁止在您的应用外部公开 file:// URI。公开的话会抛出 FileUriExposedException 异常。要在应用间共享文件,您应发送一项 content:// URI,并授予 URI 临时访问权限。具体步骤如下:
(1)配置AndroidManifest

  <provider
            android:name="android.support.v4.content.FileProvider"
            
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 Android 12 及以上版本中,为了保护用户的隐私,Google 已经禁止应用程序直接访问 MAC 地址。如果您的应用程序的 `targetSdkVersion` 设置为 33(即 Android 12),则不能使用传统的方式获取 MAC 地址,否则会导致应用程序崩溃或者无法通过应用商店审核。 如果您需要获取设备的唯一标识符,可以考虑使用 Android ID 或 Instance ID,这两种方式在上一个问题中已经有详细介绍了。 如果您非常需要使用 MAC 地址来进行设备标识,可以尝试使用以下方法: 1. 如果您的应用程序的 `targetSdkVersion` 小于 29(即 Android 10),则可以通过以下代码获取 MAC 地址: ``` WifiManager wifiManager = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE); WifiInfo wifiInfo = wifiManager.getConnectionInfo(); String macAddress = wifiInfo.getMacAddress(); ``` 2. 如果您的应用程序的 `targetSdkVersion` 大于等于 29,但小于 31(即 Android 11),可以通过以下方式获取 MAC 地址: ``` try { Enumeration<NetworkInterface> interfaces = NetworkInterface.getNetworkInterfaces(); while (interfaces.hasMoreElements()) { NetworkInterface networkInterface = interfaces.nextElement(); byte[] hardwareAddress = networkInterface.getHardwareAddress(); if (hardwareAddress != null && hardwareAddress.length > 0) { StringBuilder stringBuilder = new StringBuilder(); for (byte b : hardwareAddress) { stringBuilder.append(String.format("%02X:", b)); } if (stringBuilder.length() > 0) { stringBuilder.deleteCharAt(stringBuilder.length() - 1); } String macAddress = stringBuilder.toString(); // 根据需要,可以添加过滤条件来选择特定的网卡 if (!TextUtils.isEmpty(macAddress)) { return macAddress; } } } } catch (Exception e) { e.printStackTrace(); } ``` 需要注意的是,这种方法只能够获取到设备上的物理网卡的 MAC 地址,如果设备上没有物理网卡(例如虚拟机),则无法获取到 MAC 地址。此外,即使设备上有多个物理网卡,也不保证每个网卡都可以获取到 MAC 地址,因此需要根据实际需求进行过滤。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值