if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { if (mTelecomManager != null && mTelecomManager.isInCall()) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) { mTelecomManager.endCall(); } else { // 早期版本需要使用反射调用endCall方法 try { Method method = mTelecomManager.getClass().getDeclaredMethod("endCall"); method.invoke(mTelecomManager); } catch (Exception e) { //Log.e(TAG, "Failed to invoke endCall()", e); } } } }
时间: 2024-02-10 12:13:54 浏览: 172
Android 沉浸式状态栏与隐藏导航栏实例详解
这段代码实现的是挂断电话的功能。首先,它通过判断当前设备的 Android 版本是否大于等于 Android 5.0(LOLLIPOP)来决定使用 TelecomManager 还是使用早期版本的 API。
如果当前设备的 Android 版本大于等于 Android 5.0,那么就通过 TelecomManager 的 isInCall 方法判断当前是否正在通话中,如果是,则调用 TelecomManager 的 endCall 方法来挂断电话。
如果当前设备的 Android 版本小于 Android 5.0,则需要使用反射机制来调用早期版本的 API 来挂断电话。具体来说,就是通过反射调用 TelecomManager 的 endCall 方法来实现挂断电话。
需要注意的是,这段代码需要在 AndroidManifest.xml 文件中添加权限:
```xml
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.CALL_PHONE" />
<uses-permission android:name="android.permission.MODIFY_PHONE_STATE" />
```
同时,由于该代码使用了反射机制,需要在应用中添加以下依赖:
```groovy
dependencies {
implementation 'com.android.support:support-compat:28.0.0'
}
```
阅读全文