如何让一个类仅在某些API级别上运行?

时间:2019-06-23 22:42:56

标签: android

我正在构建一个使用Itelephony阻止呼叫的呼叫阻止应用程序。我希望我的应用程序可以从API 16开始在API级别上运行。为了使我的应用程序可以在当前API级别上运行,我需要使用CallScreeningService来筛选电话。问题是CallScreeningService仅在API级别24及更高版本上起作用。如何做到这一点,以便Itelephony阻止API级别低于24的调用,而此类阻止API级别达到24或更高的调用?

import android.telecom.Call;
import android.telecom.CallScreeningService;
import android.util.Log;

public class CallScreenService extends CallScreeningService {
    private static final int REQUEST_ID = 1;

    @Override
    public void onScreenCall(Call.Details callDetails) {
        CallResponse.Builder response = new CallResponse.Builder();
        Log.e("CallBouncer", "Call screening service triggered");
    }
}

2 个答案:

答案 0 :(得分:2)

在错误上打Alt + Enter(在Mac上)以快速解决您的问题,如下所示:

Quick Fix

在这里您可以使用两个注释之一解决此问题。

@RequiresApi将该类标记为必须在特定的API级别或更高级别上运行,尽管您的SDK级别最低。

@RequiresApi(Build.VERSION_CODES.N)
public class CallScreenService extends CallScreeningService {
    private static final int REQUEST_ID = 1;

    @Override
    public void onScreenCall(Call.Details callDetails) {
        CallResponse.Builder response = new CallResponse.Builder();
        Log.e("CallBouncer", "Call screening service triggered");
    }
}

如果您尝试在版本检查之外使用它,则会导致生成错误。

Version Check Warning

然后,您可以进行条件版本检查,以使用新类或旧类。

Version Check Passes

希望有帮助!

答案 1 :(得分:1)

if(android.os.Build.VERSION.SDK_INT >= 24){
  //do the thing that requires SDK 24 and greater
else{
  //do the thing that requires less than SDK 24
}

SDK_INT documentation

SDK_INT是此硬件设备上当前正在运行的软件的SDK版本。引导设备时,该值永远不会改变,但是当硬件制造商提供OTA更新时,该值可能会增加。

以下是所有SDK代码的链接:

SDK Version Codes