2016-01-31 8 views
5

Wie ändere ich die Telefonanruf-Benutzeroberfläche? Ich habe mein eigenes Layout für Dialer und Kontakte, aber wie ändere ich das aufrufende UI? Also, wenn der Anruf läuft, kann ich zum Beispiel die Lautsprecher-Taste entfernen?Android Phone Call UI - Ändern

Hier mein Dialer-Szene ist, die ich geschaffen habe: Dialer Picture

Aber ich weiß nicht, wie dieser Bildschirm bearbeiten: Calling Picture

EDIT: Ich habe bereits die Benutzeroberfläche erstellt haben, ich kann es einfach nicht Lass es während des Anrufs erscheinen! Hier

ist der Code für eine einfachere Version:

public class MainActivity extends Activity { 

private Button callBtn; 
private Button dialBtn; 
private EditText number; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    number = (EditText) findViewById(R.id.phoneNumber); 
    callBtn = (Button) findViewById(R.id.call); 
    dialBtn = (Button) findViewById(R.id.dial); 

    // add PhoneStateListener for monitoring 
    MyPhoneListener phoneListener = new MyPhoneListener(); 
    TelephonyManager telephonyManager = 
     (TelephonyManager) this.getSystemService(Context.TELEPHONY_SERVICE); 
    // receive notifications of telephony state changes 
    telephonyManager.listen(phoneListener,PhoneStateListener.LISTEN_CALL_STATE); 

    callBtn.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      try { 
       // set the data 
       String uri = "tel:"+number.getText().toString(); 
       Intent callIntent = new Intent(Intent.ACTION_CALL, Uri.parse(uri)); 

       startActivity(callIntent); 
      }catch(Exception e) { 
       Toast.makeText(getApplicationContext(),"Your call has failed...", 
        Toast.LENGTH_LONG).show(); 
       e.printStackTrace(); 
      } 
     } 
    }); 

    dialBtn.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      try { 
       String uri = "tel:"+number.getText().toString(); 
       Intent dialIntent = new Intent(Intent.ACTION_DIAL, Uri.parse(uri)); 

       startActivity(dialIntent); 
      }catch(Exception e) { 
       Toast.makeText(getApplicationContext(),"Your call has failed...", 
        Toast.LENGTH_LONG).show(); 
       e.printStackTrace(); 
      } 
     } 
    }); 
} 

private class MyPhoneListener extends PhoneStateListener { 

    private boolean onCall = false; 

    @Override 
    public void onCallStateChanged(int state, String incomingNumber) { 

     switch (state) { 
     case TelephonyManager.CALL_STATE_RINGING: 
      // phone ringing... 
      Toast.makeText(MainActivity.this, incomingNumber + " calls you", 
        Toast.LENGTH_LONG).show(); 
      break; 

     case TelephonyManager.CALL_STATE_OFFHOOK: 
      // one call exists that is dialing, active, or on hold 
      Toast.makeText(MainActivity.this, "on call...", 
        Toast.LENGTH_LONG).show(); 
      //because user answers the incoming call 
      onCall = true; 
      break; 

     case TelephonyManager.CALL_STATE_IDLE: 
      // in initialization of the class and at the end of phone call 

      // detect flag from CALL_STATE_OFFHOOK 
      if (onCall == true) { 
       Toast.makeText(MainActivity.this, "restart app after call", 
         Toast.LENGTH_LONG).show(); 

       // restart our application 
       Intent restart = getBaseContext().getPackageManager(). 
        getLaunchIntentForPackage(getBaseContext().getPackageName()); 
       restart.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
       startActivity(restart); 

       onCall = false; 
      } 
      break; 
     default: 
      break; 
     } 

    } 
} 
} 

Dank!

+0

Erstellen Sie Ihre eigenen Dialer – TheSunny

+2

Ich baute UI aber wie mache ich es während des Anrufs anzeigen? –

Antwort

-1

Erstellen Sie Ihre eigene Dialer UI. Überprüfen Sie this aus. Sie benötigen eine Aktivität, um die Absicht zu bearbeiten und dann eine benutzerdefinierte Benutzeroberfläche anzuzeigen, ist Ihre Aufgabe.

+2

Ich habe die UI gebaut! Ich weiß einfach nicht, wie ich es anzeigen soll !!! –

+0

Wenn Sie diesem Link folgen, dann sagt es Ihnen buchstäblich, wie Sie die Absicht zu Ihrer App umleiten können. – TheSunny

5

Add Aufruf Erlaubnis in manifest

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

müssen dann prüfen, ob Anruftaste gedrückt. für die Verwendung unter Intent-Filter

<intent-filter> 
    <action android:name="android.intent.action.CALL_BUTTON" /> 
    <category android:name="android.intent.category.DEFAULT" /> 
</intent-filter> 

und wenn

<intent-filter> 
    <action android:name="android.intent.action.VIEW" /> 
    <action android:name="android.intent.action.DIAL" /> 
    <category android:name="android.intent.category.DEFAULT" /> 
    <category android:name="android.intent.category.BROWSABLE" /> 
    <data android:scheme="tel" /> 
</intent-filter> 

die UI Brennen, die Ihre Berufung Aktivität in manifest bedeutet, dass so etwas wie diese

<activity 
     android:name="com.example.MainActivity" 
     android:label="@string/app_name" > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 

     <!-- open activity when establishing a call --> 
     <intent-filter> 
      <action android:name="android.intent.action.CALL_PRIVILEGED" /> 
      <category android:name="android.intent.category.DEFAULT" /> 
      <data android:scheme="tel" /> 
     </intent-filter> 

    </activity> 
0

Die eigentliche Berufung Ansicht sein (was Sie sehen während der Anrufe) kann nicht geändert werden.

Um genauer zu sein, einige Teile von Android können nicht überschrieben werden, Android hat seinen Kern und als Entwickler haben wir begrenzten Zugriff auf diesen Kern. In Ihrem Fall können Sie Dialer außer Kraft setzen, aber Sie können tatsächlichen Telefonanruf Ansicht nicht überschreiben.

Sie können nichts dagegen tun, bis Android-Team beschlossen, diese Kernfunktion mit uns (Entwickler) zu teilen.

+0

Bitte beschreiben Sie besser, und vielleicht erzählen Sie, was er tun konnte, da was er will nicht funktioniert, danke. – Arin

+0

Ash Patel fragt: "Ich kann es nicht während des Anrufs zeigen!", Und die Antwort lautet: Nein, das kannst du nicht, denn niemand kann es! –