android学习之——紧急呼叫

本文主要探讨了Android系统中的紧急呼叫功能,从Keyguard的相关组件入手,包括EmergencyCarrierArea.java和EmergencyButton.java,详细讲解了显示紧急呼叫界面及点击后的处理流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    学习Keyguard看到紧急呼叫 顺便看看学学。

关于锁屏流程及解锁 见Android学习——Keyguard之解锁屏


从点加载布局开始:

Keyguard\EmergencCarrierArea.java

    protected void onFinishInflate() {//加载布局 
        super.onFinishInflate();
        mCarrierText = (CarrierText) findViewById(R.id.carrier_text);
        mEmergencyButton = (EmergencyButton) findViewById(R.id.emergency_call_button);

        // The emergency button overlaps the carrier text, only noticeable when highlighted.
        // So temporarily hide the carrier text while the emergency button is pressed.
        //紧急按钮重叠载文,只有当高亮。因此,当按下紧急按钮暂时隐藏载体的文字。
        mEmergencyButton.setOnTouchListener(new OnTouchListener(){
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                if (mCarrierText.getVisibility() != View.VISIBLE) return false;
                switch(event.getAction()) {
                    case MotionEvent.ACTION_DOWN:
                        mCarrierText.animate().alpha(0);//完全透明
                        break;
                    case MotionEvent.ACTION_UP:
                        mCarrierText.animate().alpha(1);//完全显示
                        break;
                }
                return false;
            }});
    }

显示紧急呼叫的界面后点击紧急呼叫:

Keyguard\EmergencyButton.java

onFinishInflate()

    protected void onFinishInflate() {
        super.onFinishInflate();
        mLockPatternUtils = new LockPatternUtils(mContext);
        mPowerManager = (PowerManager) mContext.getSystemService(Context.POWER_SERVICE);
        setOnClickListener(new OnClickListener() {
            public void onClick(View v) {//点击
                takeEmergencyCallAction();
            }
        });

        mIsSecure = mLockPatternUtils.isSecure(KeyguardUpdateMonitor.getCurrentUser());

        updateEmergencyCallButton();
    }
显示紧急拨号器或用户返回到现有的呼叫

takeEmergencyCallAction()

   public void takeEmergencyCallAction() {
        MetricsLogger.action(mContext, MetricsLogger.ACTION_EMERGENCY_CALL);
        mPowerManager.userActivity(SystemClock.uptimeMillis(), true);
        try {
            ActivityManagerNative.getDefault().stopLockTaskMode();
        } catch (RemoteException e) {
            Slog.w(LOG_TAG, "Failed to stop app pinning");
        }
        if (isInCall()) {//正在通话
            resumeCall();
            if (mEmergencyButtonCallback != null) {
                mEmergencyButtonCallback.onEmergencyButtonClickedWhenInCall();
            }
        } else {
            KeyguardUpdateMonitor.getInstance(mContext).reportEmergencyCallAction(
                    true /* bypassHandler */);

            int phoneId = getCurPhoneId();
            if (phoneId == -1) {//-1是没PIN/PUK锁,0-3是PIN/PUK锁
                phoneId = mEccPhoneIdForNoneSecurityMode;
            }
            mEmergencyButtonExt.customizeEmergencyIntent(INTENT_EMERGENCY_DIAL, phoneId);


            getContext().startActivityAsUser(INTENT_EMERGENCY_DIAL,
                    ActivityOptions.makeCustomAnimation(getContext(), 0, 0).toBundle(),
                    new UserHandle(KeyguardUpdateMonitor.getCurrentUser()));
        }
    }
如果不能理解返回通话见下图,即正在打电话时回到锁屏状态下的keyguard界面。

剩下的不想说了···用到再跟



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值