当我删除@SuppressLint(“ RestrictedApi”)时,为什么Android Studio显示“只能从同一库组调用”?

时间:2019-10-26 03:02:20

标签: android android-studio

代码A 来自CameraX项目,您可以看到source code

当我删除@SuppressLint("RestrictedApi")时,Android Studio将显示“只能从同一库组调用”,您会看到图片1

为什么我不能删除代码A 中的@SuppressLint("RestrictedApi")?限制API是什么意思?

代码A

@SuppressLint("RestrictedApi")
    private fun updateCameraUi() {
        ...

        // Listener for button used to switch cameras
        controls.findViewById<ImageButton>(R.id.camera_switch_button).setOnClickListener {
            lensFacing = if (CameraX.LensFacing.FRONT == lensFacing) {
                CameraX.LensFacing.BACK
            } else {
                CameraX.LensFacing.FRONT
            }
            try {
                // Only bind use cases if we can query a camera with this orientation
                CameraX.getCameraWithLensFacing(lensFacing)

                // Unbind all use cases and bind them again with the new lens facing configuration
                CameraX.unbindAll()
                bindCameraUseCases()
            } catch (exc: Exception) {
                // Do nothing
            }
        }
    }

图片1

enter image description here

3 个答案:

答案 0 :(得分:2)

自编写教程以来,库中发生了重大更改。
与本教程相同,将软件包版本恢复为1.0.0-alpha06可解决该问题。

答案 1 :(得分:0)

我假设您是从ValorIva导入摄像机X。 您应该使用import android.graphics.Camera中的相机,然后才能在其上调用此方法。

答案 2 :(得分:0)

这些是库中的问题,不会影响您的代码。

在使用这些API的几个代码示例中,文件中通常会有一个@SuppressLint("RestrictedApi")隐藏警告。

尽管您必须确保使用的是正确的依赖项版本,但项目仍应按预期进行编译和运行。这些API的更改仍然非常频繁,如果您引用的是示例,则可能使用的是较旧的版本,此后发生了更改。

您最好的选择是直接查看源代码,如果您要调用的方法被声明为public,那么您可能就不会有问题。