Android手机通话UI - 更改

Ash*_*tel 8 user-interface android phone-call

如何更改电话呼叫用户界面?就像我有自己的拨号器布局和联系人布局,但我如何更改调用UI.那么,当呼叫正在进行时,我可以取下扬声器按钮吗?

这是我创建的拨号场景:拨号器图片

但我不知道如何编辑这个屏幕:调用图片

编辑:我已经建立了UI,我只是无法在通话期间显示它!

以下是更简单版本的代码:

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

    }
}
}
Run Code Online (Sandbox Code Playgroud)

谢谢!

Ame*_*eer 6

在清单中添加调用权限

<uses-permission android:name="android.permission.CALL_PHONE" />
Run Code Online (Sandbox Code Playgroud)

然后需要检查是否按下了呼叫按钮.用于下面的意图过滤器

<intent-filter>
    <action android:name="android.intent.action.CALL_BUTTON" />
    <category android:name="android.intent.category.DEFAULT" />
</intent-filter>
Run Code Online (Sandbox Code Playgroud)

并且在触发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>
Run Code Online (Sandbox Code Playgroud)

这意味着你在manifest中的调用活动将是这样的

<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>
Run Code Online (Sandbox Code Playgroud)


The*_*nny -2

构建您自己的拨号器 UI。看一下这个。您将需要一个 Activity 来处理意图,然后显示自定义 UI 就是您的任务了。