2016-05-30 6 views
0

Ich habe etwas gegoogelt, konnte aber keine klare Antwort auf meine Frage finden.Wie kann ich meinen eigenen Bildschirm "Phone Ringing" anstelle von Android's Standard ersetzen?

Ich habe eine Aktivität, die gestartet werden muss, wenn das Telefon klingelt (empfängt einen Anruf) - anstelle von Androids Standardbildschirm.

enter image description here

Ich weiß, dass ich einen Empfänger in Manifest.xml einstellen:

<uses-permission android:name="android.permission.READ_PHONE_STATE" /> 

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

und einen Empfänger-Klasse erstellen:

public class MyPhoneStateListener extends PhoneStateListener { 
 

 
    public static Boolean phoneRinging = false; 
 

 
    public void onCallStateChanged(int state, String incomingNumber) { 
 

 
     switch (state) { 
 
      case TelephonyManager.CALL_STATE_IDLE: 
 
       Log.e("DEBUG", "IDLE"); 
 
       phoneRinging = false; 
 
       break; 
 
      case TelephonyManager.CALL_STATE_OFFHOOK: 
 
       Log.e("DEBUG", "OFFHOOK"); 
 
       phoneRinging = false; 
 
       break; 
 
      case TelephonyManager.CALL_STATE_RINGING: 
 
       //Intent intent=new Intent(getClass().) 
 
       Log.e("DEBUG", "RINGING"); 
 
       phoneRinging = true; 
 

 
       break; 
 
     } 
 
    } 
 

 
} 
 

 
class ServiceReceiver extends BroadcastReceiver { 
 
    TelephonyManager telephony; 
 
    Intent in; 
 
    public void onReceive(Context context, Intent intent) { 
 
     MyPhoneStateListener phoneListener = new MyPhoneStateListener(); 
 
     telephony = (TelephonyManager) context 
 
       .getSystemService(Context.TELEPHONY_SERVICE); 
 
     telephony.listen(phoneListener, PhoneStateListener.LISTEN_CALL_STATE); 
 
    
 
    } 
 
}

jetzt kann ich Nimm "RINGEN" in meinem logcat korrekt, aber wie kann ich meine benutzerdefinierte Aktivität starten oder was ist der bevorzugte Weg?

Antwort

0

Ich fand eine Antwort und ich werde das mit Ihnen teilen.

Zuerst gibt es nichts mit onCallStateChanged Teil zu tun. so muss i Zielaktivität rufen in onReceive innerhalb BroadcastReceiver Klasse:

@Override 
 
    public void onReceive(Context context, Intent intent) { 
 
     Bundle extras = intent.getExtras(); 
 
     if (extras != null) { 
 
      String state = extras.getString(TelephonyManager.EXTRA_STATE); 
 
      if (state.equals(TelephonyManager.EXTRA_STATE_RINGING)) { 
 
       Intent intent1=new Intent(context, Ringing.class); 
 
       intent1.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
 

 
       context.startActivity(intent1); 
 
       
 
      } 
 
     } 
 
    }