2016-03-30 5 views
1

Ziel ist es, eine Klasse namens CallReceiver zu haben, die BroadcastReceiver implementiert Die Klasse wartet auf einen Anruf, wenn ein Anruf vorliegt, gibt sie die Anrufernummer an die Aktivität zurück, die die Instanz erstellt hat .android - gibt Daten zur Änderung in einer Klasseninstanz zurück

Beispiel:

MainActivity:

CallReciver callreciver = new CallReciver(getApplicationContext()); 

CallReciver.java

public class CallReceiver extends BroadcastReceiver { 

private Context mContext; 

CallReceiver(Context context) { 
    this.mContext = context; 
} 

@Override 
public void onReceive(Context context, Intent intent) { 
    String state = intent.getStringExtra(TelephonyManager.EXTRA_STATE); 

    if (TelephonyManager.EXTRA_STATE_RINGING.equals(state)) { 
     String incomingNumber = intent.getStringExtra(TelephonyManager.EXTRA_INCOMING_NUMBER); 

     Intent i = new Intent(mContext, MainActivity.class); 
     i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
     i.putExtra("callMsg", incomingNumber); 

     mContext.startActivity(i); 
    } 
} 

ich versuchte, eine Absicht mit der Nummer zu senden, wenn ein Ruf erfaßt worden ist, aber das Problem ist, dass Die Absicht startet die Aktivität und initialisiert die Variablen, ich brauche nur die Nummer.

requered Ergebnis: CallReceiver sendet die Nummer MainActivity

+0

können Sie den Code teilen? –

+0

mehr Code bitte :) – Distjubo

+0

Das wird nicht funktionieren. Lesen Sie [this] (http://developer.android.com/about/versions/android-3.1.html) für weitere Informationen. – Distjubo

Antwort

0

Bearbeiten Antwort, weil Ihre Anforderung zunächst nicht klar war. Wenn Sie nur die Nummer des Anrufers in diesem Receiver möchten, können Sie dieses Snippet ausprobieren. Habe diese Idee von dieser Antwort How to get phone number from an incoming call?

In Ihrem Manifest:

<receiver android:name=".ServiceReceiver" > 
      <intent-filter> 
       <action android:name="android.intent.action.PHONE_STATE" /> 
      </intent-filter> 
     </receiver> 

In Ihrem Empfänger:

public class ServiceReceiver extends BroadcastReceiver { 

    @Override 
    public void onReceive(final Context context, Intent intent) { 
     TelephonyManager telephony = (TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE); 
     telephony.listen(new PhoneStateListener(){ 
      @Override 
      public void onCallStateChanged(int state, String incomingNumber) { 
       super.onCallStateChanged(state, incomingNumber); 
       Intent i = new Intent(mContext, MainActivity.class); 
       i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
       i.putExtra("callMsg", incomingNumber); 
       mContext.startActivity(i); 
      } 
     },PhoneStateListener.LISTEN_CALL_STATE); 
    } 
+0

Wäre das nicht erforderlich, dass die Aktivität auf dem Bildschirm angezeigt wird? – Distjubo

+0

Nein, die lokale Übertragung beginnt nicht mit der Aktivität, sie führt nur OnRecieve Ihrer Aktivität aus, wenn die Aktivität bereits ausgeführt wird! Was genau ist Ihr Zweck Möchten Sie die Aktivität Ihrer Anwendung starten, sobald der Anrufempfänger ausgeführt wird? – Nanites

+0

@Nanites nein, ich möchte nur die Anrufer-Telefonnummer bekommen und es in eine Klassenvariable setzen – Grndhck

Verwandte Themen