outgoingcallWord格式文档下载.docx
- 文档编号:15944789
- 上传时间:2022-11-17
- 格式:DOCX
- 页数:23
- 大小:30.13KB
outgoingcallWord格式文档下载.docx
《outgoingcallWord格式文档下载.docx》由会员分享,可在线阅读,更多相关《outgoingcallWord格式文档下载.docx(23页珍藏版)》请在冰豆网上搜索。
if(Intent.ACTION_CALL_BUTTON.equals(intent.getAction())){
intent.setDataAndType(Calls.CONTENT_URI,Calls.CONTENT_TYPE);
intent.putExtra("
call_key"
true);
setIntent(intent);
}
3).在DialtactsActivity.java类中有分别实例化了DialpadFragment.java、CallLogFragment.java、PhoneFavotiteFragment这三个Tab。
拨号盘对应的文件是DialpadFragment.java,也即我们将看到的数字输入框、拨号键等都是在DialpadFragment.java文件中定义的。
4).输入数字时,对应的监听事件是setupKeypad()方法和onClick()方法。
5).点击拨号键时,首先调用了onClick()方法,在它里面接着调用了dialButtonPressed()方法。
dialButtonPressed()根据我们的事件,判断是要拨打电话,所以它会接着调用newDialNumberIntent(number)方法,得到一个返回的Intent,添加一些附加数据intent.putExtra(DialtactsActivity.EXTRA_CALL_ORIGIN,DialtactsActivity.CALL_ORIGIN_DIALTACTS),最后通过这个Intent跳转到另一个Activity。
6)代码:
privateIntentnewDialNumberIntent(Stringnumber){
finalIntentintent=newIntent(Intent.ACTION_CALL_PRIVILEGED,
Uri.fromParts(“tel”,number,null));
intent.setFlags(Intent.FALG_ACTIVITY_NEW_TASK);
returnintent;
7)由6)中代码可知,参数为Intent.ACTION_CALL_PRIVILEGED。
查找文件Intent.java中参数声明,可知ACTION_CALL_PRIVILEGED=android.intent.action.CALL_PRIVILEGED,在通过查找Phone下面的AndroidManifest.xml,知道OutgoingCallBroadcaster设置的一项intent-filter的actionname为android.intent.action.CALL_PRIVILEGED,故可知下一个跳转的界面为OutgoingCallBroadcaster。
8).当前ActivityDialtactsActivity进入onPause()
/packages/apps/Phone/src/com/android/phone/OutgoingCallBroadcaster.java
/packages/apps/Phone/src/com/android/phone/MsimDialerActivity.java
/packages/apps/Phone/src/com/android/phone/CallController.java
/packages/apps/Phone/src/com/android/phone/PhoneApp.java
2.界面跳转
1).OutgoingCallBroadcaster.java,为Activity对象。
2).使用onCreate()创建了一个Activity,该Activity是介于拨号界面和通话界面之间的一个界面
3).在onCreate()方法中得到一个Intent,代码“Intentintent=getIntent();
”。
4).下列
(1)和
(2)中的只执行一个
(1).当当前手机只用一个SIM卡可用时或尽管有多个SIM卡但没有时间选择哪个卡时,将会直接调用processIntent(intent)方法。
(2).当前手机有多个SIM卡可用,且满足其他所有条件时,我们要选择到底是使用SIM1还是SIM2,其代码如下:
IntentintentMSim=newIntent(this,MsimDialerActivity.class);
intentMSim.setData(intent.getData());
intentMSim.setAction(intent.getAction());
intsubscription=intent.getIntExtra(MsimConstants.SUBSCRIPTION_KEY,-1);
if(subscription!
=-1){
intentMSim.putExtra(MsimConstants.SUBSCRIPTION_KEY,subscription);
intrequestCode=1;
startActivityForResult(intentMSim,requestCode);
①此时我们进入到MsimDialerActivity.java中,在这个类中我们会将选择的SIM卡的信息添加到mIntent,并返回到OutgoingCallBroadcaster.java界面。
代码包括:
mIntent.putExtra(SUBSCRIPTION_KEY,subscription);
mIntent.setClass(MsimDialerActivity.this,OutgoingCallBroadcaster.class);
setResult(RESULT_OK,mIntent);
/setResult(RESULT_CANCELED,mIntent);
②此时刚从MsimDialerActivity.java中返回,接下来我们会调用
protectedvoidonActivityResult(intrequestCode,intresultCode,Intentdata){
//collectsubscriptiondatafromteintentanduseit
if(resultCode==RESULT_CANCELED){
finish();
}elseif(resultCode==RESULT_OK){
Bundleextras=data.getExtras();
mSubscription=extras.getInt(SUBSCRIPTION_KEY);
processIntent(data);
到此为止,我们将会调用processIntent(intent)方法。
5).进入processIntent(intent)方法中。
首先我们会将前面选择的SIM的信息添加到DialpadFragment.java发出的Intent中。
调用PhoneApp.getInstance().wakeUpScreen()方法(对通话在后台做进程管理),保证屏幕已经亮起。
6).从传递的Intent中得到我们要呼叫的电话号码,并且判断这个号码是否是紧急号码。
如果是紧急号码则执行代码“PhoneApp.getInstance().callController.placeCall(intent);
”,来
展示一个incallUI,并进行具体的呼叫(具体参见CallController.java和PhoneApp.java)。
接着继续执行下面的步骤。
7).最后发送一个包含Intent的广播,代码:
IntentbroadcastIntent=newIntent(Intent.ACTION_NEW_OUTGOING_CALL);
if(number!
=null){
broadcastIntent.putExtra(Intent.EXTRA_PHONE_NUMBER,number);
}
PhoneUtils.checkAndCopyPhoneProviderExtras(intent,broadcastIntent);
staticvoidcheckAndCopyPhoneProviderExtras(Intentsrc,Intentdst){
dst.putExtra(InCallScreen.EXTRA_GATEWAY_PROVIDER_PACKAGE,
src.getStringExtra(InCallScreen.EXTRA_GATEWAY_PROVIDER_PACKAGE));
dst.putExtra(InCallScreen.EXTRA_GATEWAY_URI,
src.getStringExtra(InCallScreen.EXTRA_GATEWAY_URI));
broadcastIntent.putExtra(EXTRA_ALREADY_CALLED,callNow);
broadcastIntent.putExtra(EXTRA_ORIGINAL_URI,uri.toString());
broadcastIntent.addFlags(Intent.FLAG_RECEIVER_FOREGROUND);
sendOrderedBroadcast(broadcastIntent,PERMISSION,newOutgoingCallReceiver(),
null,//scheduler
Activity.RESULT_OK,//initialCode
number,//initialData:
initialvaluefortheresultdata
null);
//initialExtras
8).由7)中代码“IntentbroadcastIntent=newIntent(Intent.ACTION_NEW_OUTGOING_CALL)
”可知参数Intent.ACTION_NEW_OUTGOING_CALL。
查找文件Intent.java中参数声明,可知ACTION_NEW_OUTGOING_CALL=android.intent.action.NEW_OUTGOING_CALL,再通过Phone下面的AndroidManifest.xml,知道OutgoingCallReceiver设置的一项intent-filter的actionname为android.intent.action.NEW_OUTGOING_CALL,故可知
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- outgoingcall