You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android 13物理设备报“Device doesn't support the messaging feature”错误求助

解决Android 13物理设备上SmsRetriever抛出ApiException:17的问题

问题描述

在Android 13物理设备中调用SmsRetriever相关代码时,抛出异常:
com.google.android.gms.common.api.ApiException: 17: Device doesn't support the messaging feature
该功能在其他Android版本及Android 13模拟器上可正常运行。

相关核心代码:

try {
    SmsRetrieverClient mClient = SmsRetriever.getClient(this);
    Task<Void> mTask = mClient.startSmsRetriever();
    mTask.addOnSuccessListener(new OnSuccessListener<Void>() {
        @Override
        public void onSuccess(Void aVoid) {
            Bundle bundle = new Bundle();
            bundle.putString("mobile", stringFromView(binding.etPhoneNumber));
            bundle.putString("setting", settingScreen);
            startActivity(OtpActivity.class, bundle);
        }
    });
    mTask.addOnFailureListener(new OnFailureListener() {
        @Override
        public void onFailure(@NonNull Exception e) {
            e.printStackTrace();
        }
    });
} catch (Exception e) {
    e.printStackTrace();
}

解决方案

1. 检查并更新Google Play服务版本

错误码17多数情况下与Google Play服务版本不兼容或过低有关。物理设备的Google Play服务可能未同步更新到适配Android 13的版本:

  • 进入设备「设置」→「应用」→「管理应用」→找到「Google Play服务」,查看版本号并更新至最新版。

2. 确认默认短信应用配置

SmsRetriever依赖系统默认短信应用的支持,部分Android 13设备的第三方短信应用可能未适配该接口:

  • 进入设备「设置」→「应用」→「默认应用」→「短信应用」,设置为系统自带短信应用或官方兼容的第三方应用。

3. 核对权限配置

  • 确保AndroidManifest.xml中声明了RECEIVE_SMS权限:
    <uses-permission android:name="android.permission.RECEIVE_SMS" />
    
  • Android 13及以上版本需动态申请POST_NOTIFICATIONS权限(SmsRetriever的工作流程依赖通知渠道):
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
        if (ContextCompat.checkSelfPermission(this, Manifest.permission.POST_NOTIFICATIONS) != PackageManager.PERMISSION_GRANTED) {
            registerForActivityResult(new ActivityResultContracts.RequestPermission(), isGranted -> {
                // 根据权限授予状态处理后续逻辑
            }).launch(Manifest.permission.POST_NOTIFICATIONS);
        }
    }
    

4. 验证设备GMS支持

部分定制ROM的Android 13设备可能未预装或禁用了Google Mobile Services(GMS),而SmsRetriever是GMS组件,无GMS支持会触发该错误:

  • 确认设备已安装并启用GMS框架,若未安装需手动适配(针对非GMS设备可考虑替换为本地短信读取方案)。

5. 调整SmsRetrieverClient初始化上下文

尝试使用ApplicationContext初始化客户端,避免Activity生命周期带来的异常:

SmsRetrieverClient mClient = SmsRetriever.getClient(getApplicationContext());

调试建议

在失败回调中捕获ApiException并打印详细信息,便于定位具体原因:

mTask.addOnFailureListener(new OnFailureListener() {
    @Override
    public void onFailure(@NonNull Exception e) {
        if (e instanceof ApiException) {
            ApiException apiException = (ApiException) e;
            Log.e("SmsRetrieverError", "错误码:" + apiException.getStatusCode() + ",详情:" + apiException.getMessage());
        }
        e.printStackTrace();
    }
});

内容的提问来源于stack exchange,提问作者Shekhar J. Lobo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 10:12:43