2010-09-28 5 views

Répondre

15

Laissez-nous mettre en œuvre cette solution en 3 étapes:

a. Définissez cette classe ou un récepteur:

Ceci est votre classe principale:

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. Fichier de manifeste:

<?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. Définir AIDL téléphonique, sous com.android.internal.telephony

package com.android.internal.telephony; 

    interface ITelephony { 
    boolean endCall(); 

    void answerRingingCall(); 

    void silenceRinger(); 
} 

mh: a marché pour moi que dans l'émulateur, pas sur des appareils réels ... Tous les appareils ci-dessus Android 2.3 nécessitent une autorisation de racine ou de l'installation comme une application de système être en mesure d'utiliser la permission android.permission.MODIFY_PHONE_STATE.

+0

Existe-t-il un moyen d'envoyer des appels à la messagerie vocale? – powder366

+1

Je copie et colle ces fichiers mais cela ne fonctionne pas! J'ai retiré cette permission –

Questions connexes