6

重複の可能性:
Androidで通話をブロックする方法

Androidでプログラム的に着信を拒否する方法を教えてもらえますか?

4

1 に答える 1

15

このソリューションを 3 つのステップで実装しましょう。

を。このクラスまたはレシーバーを定義します。

これはあなたのメインクラスです:

package com.sample;
import java.lang.reflect.Method;

import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.telephony.TelephonyManager;
import android.util.Log;
import android.widget.Toast;

import com.android.internal.telephony.*;


public class main extends BroadcastReceiver {
private static final String TAG = null;
String incommingNumber;
String incno1= "9916090941";

public void onReceive(Context context, Intent intent) {
    Bundle bundle = intent.getExtras();

    if(null == bundle)
            return;
    SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);       
    try {
        // Java reflection to gain access to TelephonyManager's
        // ITelephony getter
        TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
        Log.v(TAG, "Get getTeleService...");
        Class c = Class.forName(tm.getClass().getName());
        Method m = c.getDeclaredMethod("getITelephony");
        m.setAccessible(true);
        com.android.internal.telephony.ITelephony telephonyService = (ITelephony) m.invoke(tm);  
        Bundle b = intent.getExtras();
        incommingNumber = b.getString(TelephonyManager.EXTRA_INCOMING_NUMBER);
        Log.v(TAG,incommingNumber );
        Log.v(TAG,incno1 );
        if ( incommingNumber.equals(incno1) )
        {
             telephonyService = (ITelephony) m.invoke(tm);
               telephonyService.silenceRinger();
        telephonyService.endCall();
        Log.v(TAG,"BYE BYE BYE" );
        }
        else{

        telephonyService.answerRingingCall();
        Log.v(TAG,"HELLO HELLO HELLO" );
        }


    } catch (Exception e) {
        e.printStackTrace();
        Log.e(TAG,
                "FATAL ERROR: could not connect to telephony subsystem");
        Log.e(TAG, "Exception object: " + e);
    }


    }

}

b. マニフェスト ファイル:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.sample"
      android:versionCode="1"
      android:versionName="1.0">
    <application android:icon="@drawable/icon" android:label="@string/app_name">
       <receiver  android:name=".main">
            <intent-filter  android:priority="100" >
                <action android:name="android.intent.action.PHONE_STATE" />
            </intent-filter>
        </receiver>

    </application>
    <uses-sdk android:minSdkVersion="7" />
 <uses-permission android:name="android.permission.MODIFY_PHONE_STATE" />
    <uses-permission android:name="android.permission.CALL_PHONE" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
</manifest> 

c. com.android.internal.telephony の下に電話援助を定義します。

 package com.android.internal.telephony;

  interface ITelephony { 
    boolean endCall();

    void answerRingingCall();

    void silenceRinger();
 }

mh: 実際のデバイスではなく、エミュレーターでのみ機能しました... android 2.3 より上のすべてのデバイスでは、アクセス許可を使用できるようにするには、ルート アクセス許可またはシステム アプリとしてのインストールが必要ですandroid.permission.MODIFY_PHONE_STATE

于 2011-03-01T18:25:54.843 に答える