gpt4 book ai didi

java - 如何将 com.android.internal.telephony.ITelephony 导入到 Android 应用程序

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:55:21 25 4
gpt4 key购买 nike

我想挂断来电 我检测到它然后我想挂断它。

问题是:com.android.internal.telephony.ITelephony 没有解决。

我尝试将包 com.android.internal.telephony 添加到我的应用程序并创建接口(interface):

package com.android.internal.telephony;

public interface ITelephony {

boolean endCall();

void answerRingingCall();

void silenceRinger();

}

但通话并未结束。

在这里,我检测到调用,显示 toast(已显示)然后尝试挂断,但正如我首先所说,在我创建该程序包之前没有 com.android.internal.telephony.ITelephony:

private class CallStateListener extends PhoneStateListener {
@Override
public void onCallStateChanged(int state, String incomingNumber) {
switch (state) {
case TelephonyManager.CALL_STATE_RINGING:
// called when someone is ringing to this phone
Toast.makeText(ctx, "Incoming: " + incomingNumber, Toast.LENGTH_LONG).show();
try{
TelephonyManager tm = (TelephonyManager) ctx.getSystemService(Context.TELEPHONY_SERVICE);
Class c = Class.forName(tm.getClass().getName());
Method m = c.getDeclaredMethod("getITelephony");
com.android.internal.telephony.ITelephony telephonyService = (com.android.internal.telephony.ITelephony) m.invoke(tm);

telephonyService = (com.android.internal.telephony.ITelephony) m.invoke(tm);
telephonyService.silenceRinger();
telephonyService.endCall();
}catch (Exception e) {
e.printStackTrace();

}
break;
}
}
}

我的 list 和权限:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.a"
android:versionCode="1"
android:versionName="1.0" >

<uses-sdk
android:minSdkVersion="17"
android:targetSdkVersion="17" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS" />
<uses-permission android:name="android.permission.CALL_PHONE" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<service
android:name=".CallDetectService"
android:enabled="true"
android:exported="false" >
</service>
</application>



</manifest>

最佳答案

ITelephony 接口(interface)是内部的,因此您无法获得对它的标准引用。您可以一直使用反射,即

TelephonyManager tm = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);

Method m1 = tm.getClass().getDeclaredMethod("getITelephony");
m1.setAccessible(true);
Object iTelephony = m1.invoke(tm);

Method m2 = iTelephony.getClass().getDeclaredMethod("silenceRinger");
Method m3 = iTelephony.getClass().getDeclaredMethod("endCall");

m2.invoke(iTelephony);
m3.invoke(iTelephony);

但无论哪种方式,这些方法都需要 MODIFY_PHONE_STATE 权限,该权限只能授予系统应用程序。所以恐怕无论如何都行不通。

关于java - 如何将 com.android.internal.telephony.ITelephony 导入到 Android 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24580508/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com