我正在构建一个使用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");
}
}
答案 0 :(得分:2)
在错误上打Alt + Enter
(在Mac上)以快速解决您的问题,如下所示:
在这里您可以使用两个注释之一解决此问题。
@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");
}
}
如果您尝试在版本检查之外使用它,则会导致生成错误。
然后,您可以进行条件版本检查,以使用新类或旧类。
希望有帮助!
答案 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是此硬件设备上当前正在运行的软件的SDK版本。引导设备时,该值永远不会改变,但是当硬件制造商提供OTA更新时,该值可能会增加。
以下是所有SDK代码的链接: