11

私のアプリでは、連絡先のリストを維持します。

リスト内の連絡先からの通話はすべてドロップされます。不在着信の下に表示されますが、電話は鳴りません。

4

2 に答える 2

19

まず、次のインターフェイスを作成します。

  public interface ITelephony {

        boolean endCall();

        void answerRingingCall();

        void silenceRinger();

  }

次に、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();
       }
}

これはその単一の電話番号のみをブロックしますが、あなたはポイントを取得します。

マニフェストにこれを追加します。

<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" />
于 2011-09-08T12:35:49.007 に答える
2

ここからITelephonyのクラスをダウンロードします。

次に、それをパッケージに入れます(新しいパッケージを作成します)。com.android.internal.telephony. 次に、パッケージを適切なクラスにインポートし、呼び出しを拒否するには、endCall()メソッドを使用します。

于 2014-10-11T06:41:42.977 に答える