Nella mia app manterrò un elenco di contatti.Come rifiutare una chiamata programmaticamente in Android
Qualsiasi chiamata dai contatti nell'elenco verrà eliminata. Mostreranno le chiamate perse ma il telefono non squillerà.
Nella mia app manterrò un elenco di contatti.Come rifiutare una chiamata programmaticamente in Android
Qualsiasi chiamata dai contatti nell'elenco verrà eliminata. Mostreranno le chiamate perse ma il telefono non squillerà.
Innanzitutto creare questa interfaccia:
public interface ITelephony {
boolean endCall();
void answerRingingCall();
void silenceRinger();
}
quindi creare questa classe che si estende BroadcastReceiver
public class IncomingCallReceiver extends BroadcastReceiver {
private ITelephony telephonyService;
private String blacklistednumber = "+458664455";
@Override
public void onReceive(Context context, Intent intent) {
TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
try {
Class c = Class.forName(tm.getClass().getName());
Method m = c.getDeclaredMethod("getITelephony");
m.setAccessible(true);
ITelephony telephonyService = (ITelephony) m.invoke(tm);
Bundle bundle = intent.getExtras();
String phoneNumber = bundle.getString("incoming_number");
Log.e("INCOMING", phoneNumber);
if ((phoneNumber != null) && phoneNumber.equals(blacklistednumber)) {
telephonyService.silenceRinger();
telephonyService.endCall();
Log.e("HANG UP", phoneNumber);
}
} catch (Exception e) {
e.printStackTrace();
}
}
Questo bloccherà solo quel singolo phonenumber, ma si ottiene il punto.
Nel vostro manifesto aggiungere questo:
<receiver android:name=".IncomingCallReceiver">
<intent-filter android:priority="999">
<action android:name="android.intent.action.PHONE_STATE" />
</intent-filter>
</receiver>
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.MODIFY_PHONE_STATE" />
<uses-permission android:name="android.permission.CALL_PHONE" />
<uses-permission android:name="android.permission.PROCESS_INCOMING_CALLS" />
ciao l'ho fatto. Ma è successo sapere. Come creare quell'interfaccia cosa intendo per interfaccia normale o file helpl – harish
basta creare un intercafe normale. Ma potresti aver bisogno di metterlo in un pacchetto chiamato: com.android.internal.telephony provalo. –
anche se non funziona penso che dobbiamo generare il file aidl. Ma non so come farlo. – harish
Scarica la classe di ITelephony da here.
poi metterlo in un pacchetto (fare un nuovo pacchetto) di com.android.internal.telephony.
quindi importare il pacchetto per la classe appropriata e per rifiuto di una chiamata utilizzare il metodo endCall()
ContentObserver è la parola in cui il vostro barattolo migliori pratiche –
possibile duplicato di [Come bloccare le chiamate in Android] (http://stackoverflow.com/questions/1083527/how-to-block-calls-in-android) –
'MODIFY_PHONE_STATE' [permesso è solo per le app di sistema] (http://stackoverflow.com/questions/4715250/how-to-grant-modify-phone-state-permission-for-apps-ran-on-gingerbread) (per Android 2.3 e versioni successive). Se si desidera utilizzare l'app solo per il telefono a cui si ha accesso, è possibile [creare l'app del sistema app] (http://projectmaxs.org/documentation/systemapp.html) – tchelidze