web-dev-qa-db-fra.com

Comment bloquer un appel sur un numéro de téléphone mobile et la réception d'un message dans le développement d'applications Android?

Je souhaite implémenter une application permettant de bloquer un numéro de téléphone portable pour recevoir ou envoyer des appels et des messages. Dans mon application, je saisis le numéro de mobile dans la case EditText puis je clique sur un bouton pour bloquer le numéro de mobile saisi par l'utilisateur.

J'ai implémenté une classe d'activité comme suit:

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

        ((Button)findViewById(R.id.block)).setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                String mobileNumer = ((EditText)findViewById(R.id.mobileNum)).getText().toString();
                //How to block entered mobileNumber
            }
        });

        ((Button)findViewById(R.id.unblock)).setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                String mobileNumer = ((EditText)findViewById(R.id.mobileNum)).getText().toString();
                //How to unblock entered mobileNumber
            }
        });
    }
}

Je pense que nous pouvons utiliser BroadcastReceiver. Mais je n'ai pas plus de connaissances à ce sujet. S'il vous plaît, donnez-moi une idée de la manière de mettre en œuvre le blocage ou le déblocage d'un numéro de téléphone portable. S'il vous plaît n'importe quel corps aidez-moi .....

12
prasad.gai

créer PhoneCallReceiver .Java

import Android.content.BroadcastReceiver;
import Android.content.Context;
import Android.content.Intent;
import Android.telephony.PhoneStateListener;
import Android.telephony.TelephonyManager;
import Android.util.Log;
import Android.widget.Toast;
public class PhoneCallReceiver extends BroadcastReceiver {  

@Override
public void onReceive(Context context, Intent intent) { 
    TelephonyManager telephony = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
    PhoneCallStateListener customPhoneListener = new PhoneCallStateListener(context);
    telephony.listen(customPhoneListener, PhoneStateListener.LISTEN_CALL_STATE);



}}

Créez maintenant PhoneCallStateListener .Java

import Java.lang.reflect.Method;
import Android.content.Context;
import Android.content.Intent;
import Android.content.SharedPreferences;
import Android.media.AudioManager;
import Android.os.Bundle;
import Android.preference.PreferenceManager;
import Android.telephony.PhoneStateListener;
import Android.telephony.TelephonyManager;
import Android.widget.Toast;

import com.Android.internal.telephony.ITelephony;

public class PhoneCallStateListener extends PhoneStateListener {    

private Context context;
public PhoneCallStateListener(Context context){
    this.context = context;
}


@Override
public void onCallStateChanged(int state, String incomingNumber) {  
    SharedPreferences prefs=PreferenceManager.getDefaultSharedPreferences(context);

    switch (state) {

        case TelephonyManager.CALL_STATE_RINGING:       

              String block_number = prefs.getString("block_number", null);
            AudioManager audioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE); 
            //Turn ON the mute
            audioManager.setStreamMute(AudioManager.STREAM_RING, true);                 
            TelephonyManager telephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
            try {
                Toast.makeText(context, "in"+block_number, Toast.LENGTH_LONG).show();
                Class clazz = Class.forName(telephonyManager.getClass().getName());
                Method method = clazz.getDeclaredMethod("getITelephony");
                method.setAccessible(true);
                ITelephony telephonyService = (ITelephony) method.invoke(telephonyManager);     
                //Checking incoming call number
                System.out.println("Call "+block_number);

                if (incomingNumber.equalsIgnoreCase("+91"+block_number)) {
                    //telephonyService.silenceRinger();//Security exception problem
                     telephonyService = (ITelephony) method.invoke(telephonyManager);
                     telephonyService.silenceRinger();
                    System.out.println(" in  "+block_number);
                    telephonyService.endCall();
                }
            } catch (Exception e) {
                Toast.makeText(context, e.toString(), Toast.LENGTH_LONG).show();
            }
            //Turn OFF the mute     
            audioManager.setStreamMute(AudioManager.STREAM_RING, false);
            break;
        case PhoneStateListener.LISTEN_CALL_STATE:

    }
    super.onCallStateChanged(state, incomingNumber);
}}

Maintenant, dans src, créez ce package com.Android.internal.telephony maintenant dans ce package Cliquez avec le bouton droit de la souris -> Nouveau -> Fichier, nommez maintenant ITelephony.aidl et collez ce code

package com.Android.internal.telephony; 

interface ITelephony {      

  boolean endCall();     

  void answerRingingCall();      

  void silenceRinger(); 
}

NOTE: Le code est testé dans Android 2.2 (Froyo), 2.3 (Gingerbread)

26
Ronak Mehta
3
Ronak Mehta

Ce code fonctionne pour moi

  try {

            String serviceManagerName = "Android.os.ServiceManager";
            String serviceManagerNativeName = "Android.os.ServiceManagerNative";
            String telephonyName = "com.Android.internal.telephony.ITelephony";
            Class<?> telephonyClass;
            Class<?> telephonyStubClass;
            Class<?> serviceManagerClass;
            Class<?> serviceManagerNativeClass;
            Method telephonyEndCall;
            Object telephonyObject;
            Object serviceManagerObject;
            telephonyClass = Class.forName(telephonyName);
            telephonyStubClass = telephonyClass.getClasses()[0];
            serviceManagerClass = Class.forName(serviceManagerName);
            serviceManagerNativeClass = Class.forName(serviceManagerNativeName);
            Method getService =
                    serviceManagerClass.getMethod("getService", String.class);
            Method tempInterfaceMethod = serviceManagerNativeClass.getMethod(
                    "asInterface", IBinder.class);
            Binder tmpBinder = new Binder();
            tmpBinder.attachInterface(null, "fake");
            serviceManagerObject = tempInterfaceMethod.invoke(null, tmpBinder);
            IBinder retbinder = (IBinder) getService.invoke(
                    serviceManagerObject, "phone");
            Method serviceMethod = telephonyStubClass.getMethod("asInterface",
                    IBinder.class);
            telephonyObject = serviceMethod.invoke(null, retbinder);
            telephonyEndCall = telephonyClass.getMethod("endCall");
            telephonyEndCall.invoke(telephonyObject);

        }
    } catch (Exception e) {
        e.printStackTrace();
        Toast.makeText(context, "Unable to Block Call", Toast.LENGTH_SHORT).show();


    }
1
Android Genius

Pour bloquer un appel d'un numéro de contact spécifique, ce didacticiel vous aidera à résoudre votre problème. http://androiddesk.wordpress.com/2012/08/02/blocking-a-call-without-user-intervention-in-Android/

0
Pir Fahim Shah