我使用以下代码以编程方式断开调用,但它无效。
private void callDisconnect(){
try{
TelephonyManager manager = (TelephonyManager)this.getSystemService(this.TELEPHONY_SERVICE);
Class c = Class.forName(manager.getClass().getName());
Method m = c.getDeclaredMethod("getITelephony");
m.setAccessible(true);
ITelephony telephony = (ITelephony)m.invoke(manager);
telephony.endcall();
} catch(Exception e){
Log.d("",e.getMessage());
}
}
任何人都可以帮我吗?我是否需要更改代码或其他内容...... ??
答案 0 :(得分:5)
要以编程方式断开呼叫,您必须在项目中添加ITelephony.AIDL
文件。如果您已添加,则您的包名称必须为com/android/internal/telephony/ITelephony.AIDL
:有关详细信息,请参阅Blocking Incoming call。从here下载AIDL文件。
断开呼叫使用ITelephony的endCall();
方法
答案 1 :(得分:5)
只需使用此广播接收器即可。我在我的一个应用程序中对它进行了测试,结果非常好。
public class MyBroadcastReceiver extends BroadcastReceiver
{
@Override
public void onReceive(Context context, final Intent intent)
{
if (intent.getAction().equals(Intent.ACTION_NEW_OUTGOING_CALL))
{
String phoneNumber = intent.getExtras().getString(Intent.EXTRA_PHONE_NUMBER);
if (phoneNumber.equals("123456"))
{
if (getResultData() != null)
{
setResultData(null);
}
}
}
}
}
答案 2 :(得分:1)
在较新版本的android中不再可能。如果呼叫已经启动,则用户决定何时结束呼叫。但是你可以阻止来电的发生。
答案 3 :(得分:1)
您可以使用广播接收器的onReceive方法中的setResultData(null)函数来阻止传出呼叫。
公共类BlockOutgoing扩展了BroadcastReceiver {
String number;
@Override
public void onReceive(Context context, Intent intent)
{
Log.d("12280", "asdasNumber is-->> " + number);
number = intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER);
setResultData(null);
Toast.makeText(context, "Outgoing Call Blocked" , 5000).show();
}
}
<receiver
android:name=".BlockOutgoing"
android:label="@string/app_name" >
<intent-filter android:priority="1">
<action android:name="android.intent.action.NEW_OUTGOING_CALL" />
</intent-filter>
</receiver>
答案 4 :(得分:-1)
你无法在Android 2.3 +中使用你的代码结束这样的通话......我认为只有用户可以结束他的通话......对于早期版本You can see this link 和This one < / p>