在锁屏界面长按紧急呼救按钮添加自动拨打112功能

该功能在紧急呼救按钮中添加onLongClick事件的处理即可。其中Intent.ACTION_CALL_EMERGENCY是紧急呼救的action。

修改文件/frameworks/base/packages/Keyguard/src/com/android/keyguard/EmergencyButton.java

public class EmergencyButton extends Button {

......

    @Override
    protected void onFinishInflate() {

......

//默认的点击跳转到拨号的代码

        setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                takeEmergencyCallAction();
            }
        });

//新加的长按拨号的代码
        setOnLongClickListener(new View.OnLongClickListener() {
            @Override
            public boolean onLongClick(View v){
                Log.d(TAG, "test_ onLongClick");
                takeLongClickEmergencyCallAction();
                return true;
            }
        });
......

    /**
     * call 112.
     */
    public void takeLongClickEmergencyCallAction(){
        Log.d(TAG, "test_ takeLongClickCallAction");
        String phoneNumber = "112";
        Intent intentPhone = new Intent(Intent.ACTION_CALL_EMERGENCY, Uri.parse("tel:" + phoneNumber));
        intentPhone.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK
                    | Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
        getContext().startActivityAsUser(intentPhone,
                    new UserHandle(mLockPatternUtils.getCurrentUser()));
    }

    /**
     * Shows the emergency dialer or returns the user to the existing call.
     */
    public void takeEmergencyCallAction() {
        // TODO: implement a shorter timeout once new PowerManager API is ready.
        // should be the equivalent to the old userActivity(EMERGENCY_CALL_TIMEOUT)
        mPowerManager.userActivity(SystemClock.uptimeMillis(), true);
        if (mLockPatternUtils.isInCall()) {
            mLockPatternUtils.resumeCall();
        } else {
            final boolean bypassHandler = true;
            KeyguardUpdateMonitor.getInstance(mContext).reportEmergencyCallAction(bypassHandler);
            Intent intent = new Intent(ACTION_EMERGENCY_DIAL);
            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK
                    | Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
            getContext().startActivityAsUser(intent,
                    new UserHandle(mLockPatternUtils.getCurrentUser()));
        }
    }

......

这段代码中使用了Uri,需要import android.net.Uri;

原文地址:https://www.cnblogs.com/xiayexingkong/p/6001582.html