2016-01-31 28 views
5

Jak zmienić interfejs użytkownika połączenia telefonicznego? Tak jak mam własny układ i układ kontaktów, ale jak mogę zmienić wywołujący interfejs użytkownika. Czy w trakcie połączenia mogę na przykład usunąć przycisk głośnika?Interfejs użytkownika telefonu z Androidem - zmiana

Oto moja dialer scena że stworzyli: Dialer Picture

Ale nie wiem, jak edytować ten ekran: Calling Picture

EDIT: Mam już wbudowany interfejs użytkownika, po prostu nie mogę pokaż to podczas rozmowy!

Oto kod do postaci prostszej wersji:

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; 
     } 

    } 
} 
} 

Dzięki!

+0

Zbuduj swój własny telefon – TheSunny

+2

Zbudowałem interfejs użytkownika, ale jak mam go pokazać podczas połączenia? –

Odpowiedz

-1

Zbuduj swój własny interfejs Dialer. Sprawdź this na zewnątrz. Będziesz potrzebował działania, aby obsłużyć zamiar, a następnie wyświetlenie niestandardowego interfejsu użytkownika jest Twoją firmą.

+2

Mam zbudować interfejs użytkownika! Po prostu nie wiem jak to wyświetlić !!! –

+0

Jeśli podążysz za tym linkiem, to dosłownie powie ci, jak przekierować intencję do twojej aplikacji. – TheSunny

5

dodawania nazywając zezwolenie w jawnym

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

Następnie należy sprawdzić, czy przycisk wywołania wciśnięty. dla tego zastosowania poniżej filtra zamiarem

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

i podczas wypalania UI

<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> 

to znaczy aktywności telefonicznej w manifeście będzie coś takiego

<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

rzeczywisty widok wywołujący (co widzisz podczas połączeń) NIE MOŻNA zmienić.

Aby być bardziej szczegółowym, niektóre części Androida NIE MOGĄ być nadpisywane, android ma swoje jądro i jako programiści mamy ograniczony dostęp do tego rdzenia. W twoim przypadku możesz zastąpić dialer, ale Ty nie możesz zastąpić aktualnego widoku połączeń telefonicznych.

Nie można nic z tym zrobić, dopóki zespół androidowy nie zdecyduje się udostępnić tej podstawowej funkcji z nas (programistów).

+0

Proszę, bądź bardziej opisowy i powiedz, co może zrobić, ponieważ to, czego chce, nie działa, dziękuję. – Arin

+0

Ash Patel pyta "Po prostu nie mogę tego pokazać podczas rozmowy!", A odpowiedź brzmi: Nie, nie możesz, bo nikt nie może! –