activity与intent的关系

   在我的apk中发出了这么一个intent  :final Intent intent1 = new Intent(ACTION_DUAL_SIM_CALL, uri1);

然后在app里寻找 相应这个intent的activity:

 <intent-filter>
                <action android:name="com.intel.dualsim.ACTION_CALL" />

有三个在Phone里

 <activity-alias android:name="PrivilegedOutgoingCallBroadcaster"

 

 <activity android:name="OutgoingCallBroadcaster"


<activity-alias android:name="EmergencyOutgoingCallBroadcaster"

但是很可惜,看了log后发现那个选择用哪个phone的activity出现在outbroadcast之前,所以肯定不是Phone这个apk响应了这个intent而是别的activity,但是搜遍了所有的app发现还是这三个,说明这个选择的工作在原生的app里是在发这个intent之前就做了,于是就去看原生的app。



在DialpadFragment.java里发现了

 case R.id.dialButton: {
				 Log.d("lisa","case R.id.dialButton:");
                mHaptic.vibrate();  // Vibrate here too, just like we do for the regular keys
               
                dialButtonPressed();
                return;
            }
            case R.id.dialButton2: {
				 Log.d("lisa","case R.id.dialButton2:");
                mHaptic.vibrate();
                dialButtonPressed(DualSimConstants.DSDS_SLOT_2_ID);
                return;
            }
看dialButtonPressed(DualSimConstants.DSDS_SLOT_2_ID);

 public void dialButtonPressed(int simIndex) {
        if (isDigitsEmpty()) { // No number entered.
            handleDialButtonClickWithEmptyDigits(simIndex);
        } else {
            final String number = mDigits.getText().toString();

            // "persist.radio.otaspdial" is a temporary hack needed for one carrier's automated
            // test equipment.
            // TODO: clean it up.
            if (number != null
                    && !TextUtils.isEmpty(mProhibitedPhoneNumberRegexp)
                    && number.matches(mProhibitedPhoneNumberRegexp)
                    && (SystemProperties.getInt("persist.radio.otaspdial", 0) != 1)) {
                Log.i(TAG, "The phone number is prohibited explicitly by a rule.");
                if (getActivity() != null) {
                    DialogFragment dialogFragment = ErrorDialogFragment.newInstance(
                            R.string.dialog_phone_call_prohibited_message);
                    dialogFragment.show(getFragmentManager(), "phone_prohibited_dialog");
                }

                // Clear the digits just in case.
                mDigits.getText().clear();
            } else {
                final Intent intent;
                if (mIsDualSimSupported) {
					Log.d("lisa---","dialpadfragment");
                    intent = CallUtil.getDualSimCallIntent(number, simIndex,
                            (getActivity() instanceof DialtactsActivity ?
                                    ((DialtactsActivity)getActivity()).getCallOrigin() : null));
                } else {
                    intent = CallUtil.getCallIntent(number,
                            (getActivity() instanceof DialtactsActivity ?
                                    ((DialtactsActivity)getActivity()).getCallOrigin() : null));
                }
                startActivity(intent);
                mClearDigitsOnStop = true;
                getActivity().finish();
            }
        }
    }

看起来和之前一样,并没有在intent里多加东西,所以说确实是在发intent之前就初始化phone。


而且验证得出的结论,挂电话和哪个phone没有关系,也就是选任意的com.android.phone都可以挂电话,但是和sim卡放在1还是2的位子上相关,也就是如果是在sim卡1插槽里的话,挂电话就必须用 matt=CallManager.getInstance();而卡2就必须用matt1 = CallManager.getInstance2();


查看这个intent被谁接受,结果在Phone的xml里发现有三个activity都接收,我们需要指定一个

于是对intent做了修改   intent1.setClassName("com.android.phone",    "com.android.phone.OutgoingCallBroadcaster");

指定了activity的名字就可以避开选择哪个phone,但是原生的代码是如何解决这个问题的还需要研究





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值