завершение вызова в Android с помощью telephonyserivce.endcall()

Я работаю над приложением, в котором хочу завершить исходящий вызов. это основной класс

import android.app.Activity;
import android.content.ActivityNotFoundException;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;

public class phonecalls extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    call();
}

private void call() {
try {
    Intent callIntent = new Intent(Intent.ACTION_CALL);
    callIntent.setData(Uri.parse("tel:123456789"));
    startActivity(callIntent);
} catch (ActivityNotFoundException activityException) {
    Log.e("dialing-example", "Call failed", activityException);
}
}
} 

и исходящий класс это

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.telephony.TelephonyManager;
import android.util.Log;
import android.widget.Toast;
import com.android.internal.telephony.ITelephony;
import java.lang.reflect.Method;

public class OutgoingCallReceiver extends BroadcastReceiver {

private final String TAG = "CallControl";
Context context;
String incomingNumber;
ITelephony telephonyService;  

@Override
    public void onReceive(Context context, Intent intent) {
    TelephonyManager tm = (TelephonyManager) context .getSystemService(Context.TELEPHONY_SERVICE);
    try {
        // Java reflection to gain access to TelephonyManager's
        // ITelephony getter
        Bundle bundle = intent.getExtras();

        if(null == bundle)
                return;

        String phonenumber = intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER);

        Log.i("OutgoingCallReceiver",phonenumber);
        Log.i("OutgoingCallReceiver",bundle.toString());

        String info = "Detect Calls sample application\nOutgoing number: " + phonenumber;


        Toast.makeText(context, info, Toast.LENGTH_LONG).show();

        Log.v(TAG, "Get getTeleService...");
        Class c = Class.forName(tm.getClass().getName());
        Method m = c.getDeclaredMethod("getITelephony");
        m.setAccessible(true);
        telephonyService=(ITelephony) m.invoke(tm);
        telephonyService.endCall();
    } catch (Exception e) {
        e.printStackTrace();
        Log.e(TAG,
                "FATAL ERROR: could not connect to telephony subsystem");
        Log.e(TAG, "Exception object: " + e);
    }       

    }
}

Но вызов не завершен, хотя я могу напечатать нет. когда начинается исходящий вызов, который показывает, что приемник вещания работает правильно.

Любое предложение


person Deepender Singla    schedule 30.12.2012    source источник
comment
Наконец-то готово, поэтому любой, кому нужна помощь в этом, может спросить .. рад помочь   -  person Deepender Singla    schedule 09.01.2013
comment
Помогите пожалуйста Нужен рабочий вариант завершения звонка с определенного номера любой техникой. Мне нужна рабочая версия на устройстве 2.3.3+, вы можете мне помочь?   -  person Pro_Zeck    schedule 26.05.2013


Ответы (1)


Да, определенно есть два способа сделать это, используя для этого режим полета или внутреннюю телефонию. Я использовал внутреннюю телефонию, и разработанный мной код загружен здесь https://github.com/deependersingla/end_calls.

Если вам нужно что-то еще, скажите мне, буду рад помочь.

person Deepender Singla    schedule 27.05.2013
comment
@ deepender Singla код, который вы загрузили на свой github, делает этот проект блокирующим входящий вызов или исходящие вызовы Можете ли вы объяснить это И можете ли вы также объяснить, в каком формате мы должны указать номер для блокировки вызовов означает, что номер, который я хочу заблокировать это 0345xxxxxxx, я должен просто передать его вот так в намерение, или я ввожу число, подобное этому 92345XXXXXXX Можете ли вы объяснить? - person Pro_Zeck; 29.05.2013
comment
этот проект не блокирует ни один номер, он просто завершает вызов через несколько секунд, он дает пропущенный вызов в течение указанных секунд. - person Deepender Singla; 30.05.2013