问题:Gtalk

http://androidxref.com/2.3.6/xref/frameworks/base/media/java/android/media/AudioService.java#706

705    /** @see AudioManager#setMode(int) */
706    public void setMode(int mode, IBinder cb) {
707        if (!checkAudioSettingsPermission("setMode()")) {
708            return;
709        }
710
711        if (mode < AudioSystem.MODE_CURRENT || mode >= AudioSystem.NUM_MODES) {
712            return;
713        }
714
715        synchronized (mSettingsLock) {
716            if (mode == AudioSystem.MODE_CURRENT) {
717                mode = mMode;
718            }
719            if (mode != mMode) {
720                if (AudioSystem.setPhoneState(mode) == AudioSystem.AUDIO_STATUS_OK) {
721                    mMode = mode;
722
723                    synchronized(mSetModeDeathHandlers) {
724                        SetModeDeathHandler hdlr = null;
725                        Iterator iter = mSetModeDeathHandlers.iterator();
726                        while (iter.hasNext()) {
727                            SetModeDeathHandler h = (SetModeDeathHandler)iter.next();
728                            if (h.getBinder() == cb) {
729                                hdlr = h;
730                                // Remove from client list so that it is re-inserted at top of list
731                                iter.remove();
732                                break;
733                            }
734                        }
735                        if (hdlr == null) {
736                            hdlr = new SetModeDeathHandler(cb);
737                            // cb is null when setMode() is called by AudioService constructor
738                            if (cb != null) {
739                                // Register for client death notification
740                                try {
741                                    cb.linkToDeath(hdlr, 0);
742                                } catch (RemoteException e) {
743                                    // Client has died!
744                                    Log.w(TAG, "setMode() could not link to "+cb+" binder death");
745                                }
746                            }
747                        }
748                        // Last client to call setMode() is always at top of client list
749                        // as required by SetModeDeathHandler.binderDied()
750                        mSetModeDeathHandlers.add(0, hdlr);
751                        hdlr.setMode(mode);
752                    }
753
754                    if (mode != AudioSystem.MODE_NORMAL) {
755                        clearAllScoClients();
756                    }
757                }
758            }
759            int streamType = getActiveStreamType(AudioManager.USE_DEFAULT_STREAM_TYPE);
760            int index = mStreamStates[STREAM_VOLUME_ALIAS[streamType]].mIndex;
761            setStreamVolumeInt(STREAM_VOLUME_ALIAS[streamType], index, true, false);
762        }
763    }
764

http://androidxref.com/4.0.4/xref/frameworks/base/media/java/android/media/AudioService.java#854

853    /** @see AudioManager#setMode(int) */
854    public void setMode(int mode, IBinder cb) {
855        if (!checkAudioSettingsPermission("setMode()")) {
856            return;
857        }
858
859        if (mode < AudioSystem.MODE_CURRENT || mode >= AudioSystem.NUM_MODES) {
860            return;
861        }
862
863        int newModeOwnerPid = 0;
864        synchronized(mSetModeDeathHandlers) {
865            if (mode == AudioSystem.MODE_CURRENT) {
866                mode = mMode;
867            }
868            newModeOwnerPid = setModeInt(mode, cb, Binder.getCallingPid());
869        }
870        // when entering RINGTONE, IN_CALL or IN_COMMUNICATION mode, clear all
871        // SCO connections not started by the application changing the mode
872        if (newModeOwnerPid != 0) {
873             disconnectBluetoothSco(newModeOwnerPid);
874        }
875    }
876
877    // must be called synchronized on mSetModeDeathHandlers
878    // setModeInt() returns a valid PID if the audio mode was successfully set to
879    // any mode other than NORMAL.
880    int setModeInt(int mode, IBinder cb, int pid) {
881        int newModeOwnerPid = 0;
882        if (cb == null) {
883            Log.e(TAG, "setModeInt() called with null binder");
884            return newModeOwnerPid;
885        }
886
887        SetModeDeathHandler hdlr = null;
888        Iterator iter = mSetModeDeathHandlers.iterator();
889        while (iter.hasNext()) {
890            SetModeDeathHandler h = (SetModeDeathHandler)iter.next();
891            if (h.getPid() == pid) {
892                hdlr = h;
893                // Remove from client list so that it is re-inserted at top of list
894                iter.remove();
895                hdlr.getBinder().unlinkToDeath(hdlr, 0);
896                break;
897            }
898        }
899        int status = AudioSystem.AUDIO_STATUS_OK;
900        do {
901            if (mode == AudioSystem.MODE_NORMAL) {
902                // get new mode from client at top the list if any
903                if (!mSetModeDeathHandlers.isEmpty()) {
904                    hdlr = mSetModeDeathHandlers.get(0);
905                    cb = hdlr.getBinder();
906                    mode = hdlr.getMode();
907                }
908            } else {
909                if (hdlr == null) {
910                    hdlr = new SetModeDeathHandler(cb, pid);
911                }
912                // Register for client death notification
913                try {
914                    cb.linkToDeath(hdlr, 0);
915                } catch (RemoteException e) {
916                    // Client has died!
917                    Log.w(TAG, "setMode() could not link to "+cb+" binder death");
918                }
919
920                // Last client to call setMode() is always at top of client list
921                // as required by SetModeDeathHandler.binderDied()
922                mSetModeDeathHandlers.add(0, hdlr);
923                hdlr.setMode(mode);
924            }
925
926            if (mode != mMode) {
927                status = AudioSystem.setPhoneState(mode);
928                if (status == AudioSystem.AUDIO_STATUS_OK) {
929                    // automatically handle audio focus for mode changes
930                    handleFocusForCalls(mMode, mode, cb);
931                    mMode = mode;
932                } else {
933                    if (hdlr != null) {
934                        mSetModeDeathHandlers.remove(hdlr);
935                        cb.unlinkToDeath(hdlr, 0);
936                    }
937                    // force reading new top of mSetModeDeathHandlers stack
938                    mode = AudioSystem.MODE_NORMAL;
939                }
940            } else {
941                status = AudioSystem.AUDIO_STATUS_OK;
942            }
943        } while (status != AudioSystem.AUDIO_STATUS_OK && !mSetModeDeathHandlers.isEmpty());
944
945        if (status == AudioSystem.AUDIO_STATUS_OK) {
946            if (mode != AudioSystem.MODE_NORMAL) {
947                if (mSetModeDeathHandlers.isEmpty()) {
948                    Log.e(TAG, "setMode() different from MODE_NORMAL with empty mode client stack");
949                } else {
950                    newModeOwnerPid = mSetModeDeathHandlers.get(0).getPid();
951                }
952            }
953            int streamType = getActiveStreamType(AudioManager.USE_DEFAULT_STREAM_TYPE);
954            int index = mStreamStates[STREAM_VOLUME_ALIAS[streamType]].mIndex;
955            setStreamVolumeInt(STREAM_VOLUME_ALIAS[streamType], index, true, false);
956        }
957        return newModeOwnerPid;
958    }
959

About Gtalk相关推荐

  1. python接收邮件g_Python接收Gmail新邮件并发送到gtalk的方法

    本文实例讲述了Python接收Gmail新邮件并发送到gtalk的方法.分享给大家供大家参考.具体实现方法如下: #!/usr/bin/env python # -*- coding: utf-8 - ...

  2. python邮件转发_把Gmail邮件转发到gtalk的Python方法

    用Python方法把Gmail邮件转发到gtalk有多难,想知道gmail如何转发邮件?gmail自动转发已收到邮件的设置方法.本文就来把这段详细的python学习参考代码贴出来,大家一起参考下吧. ...

  3. python接收最新邮件_Python接收Gmail新邮件并发送到gtalk的方法

    本文实例讲述了Python接收Gmail新邮件并发送到gtalk的方法.分享给大家供大家参考.具体实现方法如下: #!/usr/bin/env python # -*- coding: utf-8 - ...

  4. Tapioca:linux上同gtalk语音通信

    安装比较简单,只是在输入用户名的时候要输入gmail的全称.声音效果可以接受,比gtalk要差些.

  5. 在Gtalk中和你的msn,yahoo,icq/aim,qq好友聊天

    2006年1月17日,Google支持服务器互相通讯,可与任何支援dialback协议的Jabber服务器"结盟"(federate,此术语即服务器互通之意). --维基百科 Gt ...

  6. IM互通新方案-GTalk to VoIP回拨服务

    IM互通新方案-GTalk to VoIP回拨服务 本文来源:  作者:  [字体:大 中 小] ITBear 2007-09-19日消息: MSN和Yahoo已经实现了互通,不过那也仅限于文字消息的 ...

  7. 评论一下现有几个开源IM框架(Msn/QQ/Fetion/Gtalk...)

    ---------------- 前言 ---------------- 这阵子,在集成通讯框架, 由于不想自己造轮子,因此参考了现在一些开源的IM框架,结果是..... 让我有点不爽,导致开发的时间 ...

  8. Jove:@AlanCui 在手机上用QQ或GTalk来贴Fanfou吧, 不用敲空格或省略号. 好像你输入多少个中文字符就要补多少个空格...

    Jove:@ AlanCui 在手机上用QQ或GTalk来贴Fanfou吧, 不用敲空格或省略号. 好像你输入多少个中文字符就要补多少个空格

  9. 9780 RIM gtalk不能使用的解決方案 service not enabled for this handheld

    Forward: BB新手,才用9780一個多星期,上服務三天不到.....理解可能不得力 ------------------------------------------------------ ...

  10. (转)最全的Gtalk使用技巧和方法教程

    最近身边好多朋友开始转战Gtalk,我那申请了几年都没说过几句话的Gtalk终于迎来了春天.松松哥在评 论中说,GTalk不是所有人都会用.现在我就把给他们整理的一些小资料分享给大家,咱也见证下Gta ...

最新文章

  1. VS2017中使用码云上传项目以及问题汇总
  2. 分析器错误(在浏览器中查看.aspx)
  3. docker api 基本介绍和使用
  4. C++ 动态库导出函数名“乱码”及解决
  5. servlrt程序的入口点是_刚刚,微信偷偷更新,小程序又放大招了!
  6. 发布到服务器接口404_接口测试怎么做?
  7. LeetCode 1912. 设计电影租借系统(map+set)
  8. elementui的upload组件怎么获取上传的文本流、_抖音feed流直播间引流你还不会玩?实操讲解...
  9. android实践练习_android 练习之路 (四)
  10. mysql会更改原excel吗,上传到mysql时,excel的日期发生变化
  11. 修改初始Manager QuerySets,重写Manager.get_query_set()函数之后,发现并没有按照我们指定的方法执行。...
  12. 【OpenCV学习笔记】【函数学习】十六(Rect参数介绍)
  13. 计算机学院毕业生德育总结,毕业生德育答辩总结_相关文章专题_写写帮文库
  14. python试题库_python 题库
  15. 三字经带注解_三字经注释及解析
  16. 汉字转拼音函数SQLSERVER数据库
  17. SQL Server跟踪(Trace)--系统跟踪日志;从小白到大神,文章细节满满,细致到令人发指。
  18. java (零钱通)
  19. 100年量子计算风云史,“量子比特”何时统治世界?| 技术特稿
  20. Linux的rm-rf

热门文章

  1. 【微积分】算法数学基础之微积分
  2. 信捷原创程序,8个伺服轴
  3. 如何拒绝别人和成为别人拒绝不了的人
  4. SizeBalanceTree详解(含代码实现)
  5. 快来看看你知道这些 Java 学习网站么?
  6. 经济萧条时期如何做好市场调研
  7. 用css3做出好看的盒子阴影
  8. app测试日志如何获取,logcat值得拥有
  9. Spring的@Bean注解使用
  10. 数据分析基础知识复习