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

Affectiva affdex-sdk仅兼容Android SDK22?适配高版本问题咨询

解答Affectiva SDK适配Android 23+版本的问题

问题1:为啥示例只支持SDK版本22呢?

要知道Android 6.0(API 23)开始引入了运行时权限机制,而API 22及之前都是安装时就自动授予权限。你用的这个Affectiva示例是基于旧版SDK(3.2.0-01)开发的,当时根本没考虑运行时权限的事儿。当你把targetSdk升到23+之后,系统会严格执行新的权限规则——相机权限属于「危险权限」,必须在App运行时主动向用户请求,可示例代码里完全没加这部分逻辑,结果相机初始化的时候拿不到权限,直接就抛出IllegalStateException崩溃了。

另外旧版本的affdex-sdk内部也没适配API 23+的权限模型,还是依赖旧的自动授权机制,在高版本系统下自然就没法正常获取相机权限啦。

问题2:怎么让affdex-sdk适配新版Android SDK?

你可以按下面这几步来操作,一步步解决适配问题:

1. 优先把affdex-sdk更到最新版本

旧版本的3.x SDK大概率已经停止维护了,新版本肯定已经适配了Android 6.0+的权限机制,甚至还兼容了更高版本的系统特性。直接在build.gradle里把依赖换成最新版本就行(具体版本号可以查Affectiva官方文档确认):

implementation('com.affectiva.android:affdexsdk:4.+') // 替换为当前最新稳定版

2. 手动添加运行时权限请求逻辑

如果暂时没法升级SDK,或者新版本仍需要自己处理权限,那就得在启动相机前主动请求相机权限:

  • 先确保AndroidManifest.xml里已经声明了相机相关权限:
<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus" />
  • 然后在启动相机的Activity里,加上权限检查和请求的代码:
private static final int CAMERA_PERMISSION_REQUEST_CODE = 100;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    
    // 先检查相机权限有没有拿到
    if (ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA)
            != PackageManager.PERMISSION_GRANTED) {
        // 没权限就主动向用户请求
        ActivityCompat.requestPermissions(this,
                new String[]{Manifest.permission.CAMERA},
                CAMERA_PERMISSION_REQUEST_CODE);
    } else {
        // 权限已经有了,直接初始化相机
        initCamera();
    }
}

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    if (requestCode == CAMERA_PERMISSION_REQUEST_CODE) {
        if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
            // 用户同意了权限,赶紧初始化相机
            initCamera();
        } else {
            // 用户拒绝了,提示一下然后退出吧
            Toast.makeText(this, "需要相机权限才能正常运行哦", Toast.LENGTH_SHORT).show();
            finish();
        }
    }
}

private void initCamera() {
    // 这里放你原来的相机初始化逻辑,比如创建CameraDetector之类的代码
}

3. 调整build.gradle的配置

把compileSdkVersion和targetSdkVersion更新到你需要的版本(比如现在主流的33),同时确保buildToolsVersion和compileSdkVersion匹配:

android {
    compileSdkVersion 33
    defaultConfig {
        minSdkVersion 21
        targetSdkVersion 33
        // 其他原有配置不变...
    }
    buildToolsVersion '33.0.2' // 版本号和compileSdk对应上就行
}

4. 检查相机初始化逻辑

如果权限处理完还是崩溃,可能是旧版本SDK的相机初始化方式在高版本Android上不兼容——比如Android 10(API 29)的Scoped Storage、Android 11(API 30)的权限限制这些,旧SDK都没适配。这种情况下,升级到最新版的affdex-sdk是最稳妥的解决办法,官方肯定已经修复了这些兼容性问题。


内容的提问来源于stack exchange,提问作者BetterSaveThanSorry

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:42:14