2011-07-07 13 views
5

używam to:jak znaleźć numer wychodzącego w menedżerze Telephony

public void onCallStateChanged(int state, String incomingNumber) 

który słucha:

telephonyManager.listen(listener,PhoneStateListener.LISTEN_CALL_STATE); 

Chcę wiedzieć zarówno połączenia wychodzące i przychodzące, ale na razie tylko dostać połączenia przychodzące (gdy dzwonią zmiany stanu). Czy ktoś może mi powiedzieć, kiedy mogę wykryć połączenie wychodzące i jego koniec? Czy istnieje sposób symulacji połączeń wychodzących w emulatorze Eclipse? był w stanie to zrobić dla połączeń przychodzących za pośrednictwem kontrolki emulatora w czasie zaćmienia.

Odpowiedz

13

Użyj odbiornika broadcast z intencyjnym android.intent.action.NEW_OUTGOING_CALL parametrem string dla IntentFilter i nie zapomnij dać zgody w AndroidMenifest na PROCESS_OUTGOING_CALLS. To zadziała. Gdy pojawi się połączenie wychodzące, wyświetli się komunikat toast. Kod znajduje się poniżej.

public static final String outgoing = "android.intent.action.NEW_OUTGOING_CALL" ; 
IntentFilter intentFilter = new IntentFilter(outgoing); 
BroadcastReceiver OutGoingCallReceiver = new BroadcastReceiver() 
{ 
    @Override 
    public void onReceive(Context context, Intent intent) 
    { 
     // TODO Auto-generated method stub 
     String outgoingno = intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER); 
     Toast.makeText(context, "outgoingnum =" + outgoingno,Toast.LENGTH_LONG).show(); 
    } 
}; 
registerReceiver(brForOutgoingCall, intentFilter); 
1

Tworzenie nowej klasy, powiedzmy MyPhoneReceiver, rozciąga się od BroadcastReceiver i wdrożyć metody onReceive.

public class MyPhoneReceiver extends BroadcastReceiver{ 
    @Override 
    public void onReceive(Context context, Intent intent){ 

     String phoneNumber = intent.getStringExtra(TelephonyManager.EXTRA_INCOMING_NUMBER); 

    } 
} 

W innej klasy, powiedzmy, MainActivity.class wewnątrz metody onCreate. na przykład.

IntentFilter filter = new IntentFilter("android.intent.action.NEW_OUTGOING_CALL"); 
    MyPhoneReceiver myPhoneReceiver = new MyPhoneReceiver(); 
    registerReceiver(myPhoneReceiver,filter); 

W AndroidManifest.xml

<receiver 
    android:name=".MyPhoneReceiver"> 
    <intent-filter> 
    <action android:name="android.intent.action.NEW_OUTGOING_CALL" /> 
    </intent-filter> 
</receiver> 

a także w AndroidManifest.xml dodać:

<uses-permission 
    android:name="android.permission.PROCESS_OUTGOING_CALLS"> 
</uses-permission> 
Powiązane problemy