当前位置:编程学习 > wap >>

android phone源码开发, 碰到的问题



拔号后,调用OutgoingCallBroadcaster类
**********************************OutgoingCallBroadcaster******************************************

OutgoingCallBroadcaster将在往外拨打电话时被调用,当然执行其onCreate()方法

首先:
        Intent intent = getIntent();
        if (LOGV) Log.v(TAG, "onResume: Got intent " + intent + ".");

        String action = intent.getAction();
        String number = PhoneNumberUtils.getNumberFromIntent(intent, this);

//获取到PhoneApp对象,获取Intent,并且取得拨出的号码


然后,发送广播“Intent.ACTION_NEW_OUTGOING_CALL”,让别人进行处理



  broadcastIntent.putExtra(EXTRA_ALREADY_CALLED, callNow);
        broadcastIntent.putExtra(EXTRA_ORIGINAL_URI, intent.getData().toString());
        if (LOGV) Log.v(TAG, "Broadcasting intent " + broadcastIntent + ".");
        sendOrderedBroadcast(broadcastIntent, PERMISSION, null, null,
                             Activity.RESULT_OK, number, null);

广播发送后OutgoingCallReceiver将会收到

**********************************OutgoingCallReceiver******************************************

本类是一个内部类,在类 OutgoingCallBroadcaster 里面,作用是接受OutgoingCallBroadcaster发送的广播,判断是否已经启动InCallScreen,

没有启动的话就进行一些初始化,如:对OTA进行初始化。然后启动InCallScreen。


   如果为false,表示不是紧急号码,并且InCallScrenn没有被启动,所以需要将InCallScrenn启动,如下:

     Intent newIntent = new Intent(Intent.ACTION_CALL, uri);
        newIntent.putExtra(Intent.EXTRA_PHONE_NUMBER, number);
        newIntent.setClass(context, InCallScreen.class);
        newIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

        context.startActivity(newIntent);

并且启动对应的Activity

**************************InCallScreen**********************************

  该类extends了Acitivity,并且implements了OnClickListener和OnTouchListener,

  所以该类主要是负责打电话的那一个界面,并且还负责各种按键事件和触摸时间的处理。同时本类还复写的finish()方法,所以一般不会被finish掉,调用这个方法时它又把自己放回栈中。

   InCallScreen可以接收这个Intent并启动。。

  在onCreate里面将各个view加载。

  在onResume里面进行一些初始化操作,如:获取一个PhoneApp对象 解开Keyguard Notification的statusBar给DIsable。。。。

  还内置了一个Handler可以回调处理一些事件,比如: PHONE_STATE_CHANGED ;PHONE_DISCONNECT ;        EVENT_HEADSET_PLUG_STATE_CHANGED  

  同时有一个独立的BroadcastReceiver处理ACTION_HEADSET_PLUG,比如插入耳机等。。。。


**********************************PhoneApp*******************************************

该类是一个普通的java类,主要负责Phone对象的生成


这是一个虚拟的Phone对象,它从framework层取得一个Phone对象。该类继承自Application,同时能常驻内存

他和PhoneUtils一起处理电话操作



在oncreate方法里面进行各种全局的初始化:获取Phone对象 NotificationMgr对象     PowerManager对象    SimCard对象等。。。



同时内置的Handler可以回调处理各种事件,如:EVENT_SIM_ABSENT      EVENT_SIM_NETWORK_LOCKED      EVENT_UPDATE_INCALL_NOTIFICATION等。。。
eoeAndroid




//现在我的问题是 PhoneApp  类,根本不启动,各位有什么办法让它启动吗? 我怀疑的是PhoneApp类在系统启动时就启用,所以我的启用程序里启动不了它。获取它的单实例对象,它也是空的,null,各位大侠有什么办法没? --------------------编程问答-------------------- 我觉得就算你管理好了,还是会有问题,phone的对象都是又系统来控制,phone的优先级是最高的,这样视图控制它,肯定会有别的问题 --------------------编程问答-------------------- 确实有很多问题啊,但没办法啊,公司需要做phone界面及操作的改写,必须要独立成一个应用程序。所以现在请问各位大侠,有什么办法啊?
 
有哪位做过phone源码 的改写吗?说说思路也好啊,拜托 --------------------编程问答-------------------- 好难。。。 --------------------编程问答-------------------- /packages/apps/Phone --------------------编程问答-------------------- 楼主知道通话记录是在源代码什么地方加到数据库的吗?找了半天找不到。 --------------------编程问答-------------------- PhoneApp的onCreate()就是系统开机时,即初始化时启动的,建议你跟踪LOG去了解一下

简单的理解:PhoneApp就是Android这个大工厂为你的通讯功能造一个电话,这个建造过程是在初始化过程进行的,而不是说打电话时才给你造一个,要是每次要用时才建造的话,来电或者其它RF消息的上报每次都建造是不是会很繁琐而且难以实现?即使能实现,那速度谁都不能接受。

PhoneApp.java -> onCreate() ->
// Initialize the telephony framework
PhoneFactory.makeDefaultPhones(this);
// Get the default phone
phone = PhoneFactory.getDefaultPhone(); --------------------编程问答--------------------
引用 2 楼 fjjfsj 的回复:
确实有很多问题啊,但没办法啊,公司需要做phone界面及操作的改写,必须要独立成一个应用程序。所以现在请问各位大侠,有什么办法啊?
 
有哪位做过phone源码 的改写吗?说说思路也好啊,拜托


只需调用就行,基本无需改PhoneApp里的东西 --------------------编程问答--------------------
引用 5 楼 joy1533 的回复:
楼主知道通话记录是在源代码什么地方加到数据库的吗?找了半天找不到。
:兄弟!正好我也在弄这个问题,遇到的问题,跟你是一样的,知道了告诉一声哦,刚开始弄,找了半天也找不到通话记录是在源代码什么地方加到数据库的! --------------------编程问答--------------------
引用 8 楼 gao18bin 的回复:
引用 5 楼 joy1533 的回复:
楼主知道通话记录是在源代码什么地方加到数据库的吗?找了半天找不到。
:兄弟!正好我也在弄这个问题,遇到的问题,跟你是一样的,知道了告诉一声哦,刚开始弄,找了半天也找不到通话记录是在源代码什么地方加到数据库的!


ContactProvider里面,是通过内容提供者对其进行访问的 ,
 <provider android:name="CallLogProvider"
            android:authorities="call_log"
            android:syncable="false" android:multiprocess="false"
            android:readPermission="android.permission.READ_CONTACTS"
            android:writePermission="android.permission.WRITE_CONTACTS">
        </provider>
--------------------编程问答-------------------- LZ能解答我怎样调试phone么?能实现在eclipse里修改调试么?谢谢啦  --------------------编程问答-------------------- 我想知道怎么监听对方是否接听,PhoneStateListener肯定是不行的 --------------------编程问答--------------------
引用 10 楼 wufeng131 的回复:
LZ能解答我怎样调试phone么?能实现在eclipse里修改调试么?谢谢啦


你现在知道怎么在eclipse里修改调试phone了吗?万分感谢阿 --------------------编程问答-------------------- 我的源码在      PhoneFactory.makeDefaultPhones(this);处报错:

add_service permission 
java.lang.securityException.请问楼主,你的好了么,如果好了,给小弟指点一下,将感恩。 --------------------编程问答-------------------- 现在我也遇到同样的需求,可以加qq讨论下吗,就算帮帮我好么,我qq:504490738,谢谢 --------------------编程问答-------------------- 求指点啊,哥们,我也遇到这问题了,咋整啊,您的解决了吗,求代码一份啊,万分感谢 wangziht03@163.com
补充:移动开发 ,  Android
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,