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 .....
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)
pour bloquer les appels entrants, utilisez cette http://androidsourcecode.blogspot.in/2010/10/blocking-incoming-call-Android.html et aussi cette http://www.codeproject.com/Questions/ 333253/Bloquer les appels entrants dans Android-sans-single-rin , http://www.anddev.org/post52643.html?hilit=incoming%20call#p52643 ou pour bloquer les communications sortantes, voir Comment bloquer les appels et les SMS sortants SMS et Bloquer les appels et les SMS sortants (BroadcastReceiver ou Service?) , Android: Prenez le contrôle intégral du téléphone (mode Kiosque), est c'est possible? Comment?
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();
}
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/