activity与intent的关系
2015-03-26 09:39
169 查看
在我的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里发现了
看起来和之前一样,并没有在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,但是原生的代码是如何解决这个问题的还需要研究
然后在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,但是原生的代码是如何解决这个问题的还需要研究
相关文章推荐
- Android activity launchMode与Intent.Flag关系
- Android6.0 AMS启动Activity(六) AMS与PKMS关系(通过Intent获取ActivityInfo)
- Activity和Intent的关系
- Activity 生命周期和栈(Task)的关系及Intent 常用的Flags
- Android Activity传递数据使用getIntent()接收不到,揭秘Intent传递数据与Activity启动模式singleTask的关系。
- Android开发学习笔记-3 Activity-2 Activity和Intent关系
- Android_View,ViewGroup,Window之间的关系 android activity,intent,service是什么关系?
- Intent 与 Activity 相互关系
- Activity的生命周期函数、onActivityResult、intent和启动模式的调用关系
- 说说 Activity,Intent,Service 是什么关系
- Android之多个Activity之间的关系和Intent作用
- Android6.0 AMS启动Activity(六) AMS与PKMS关系(通过Intent获取ActivityInfo)
- intent启动activity和activity的task启动模式的关系与区别
- Activity、Task、Application关系+Intent启动Flag
- Activity、Task、Application关系+Intent启动Flag
- Error running second Activity: The activity must be exported or contain an intent-filter
- Android-->intent-filter 过滤规则的匹配 (Activity通过Uri传递参数)
- ActivityGroup相关--getLocalActivityManager() 以及intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)用法
- 剖析Activity、Window、ViewRootImpl和View之间的关系
- intent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);