About Gtalk
问题: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相关推荐
- python接收邮件g_Python接收Gmail新邮件并发送到gtalk的方法
本文实例讲述了Python接收Gmail新邮件并发送到gtalk的方法.分享给大家供大家参考.具体实现方法如下: #!/usr/bin/env python # -*- coding: utf-8 - ...
- python邮件转发_把Gmail邮件转发到gtalk的Python方法
用Python方法把Gmail邮件转发到gtalk有多难,想知道gmail如何转发邮件?gmail自动转发已收到邮件的设置方法.本文就来把这段详细的python学习参考代码贴出来,大家一起参考下吧. ...
- python接收最新邮件_Python接收Gmail新邮件并发送到gtalk的方法
本文实例讲述了Python接收Gmail新邮件并发送到gtalk的方法.分享给大家供大家参考.具体实现方法如下: #!/usr/bin/env python # -*- coding: utf-8 - ...
- Tapioca:linux上同gtalk语音通信
安装比较简单,只是在输入用户名的时候要输入gmail的全称.声音效果可以接受,比gtalk要差些.
- 在Gtalk中和你的msn,yahoo,icq/aim,qq好友聊天
2006年1月17日,Google支持服务器互相通讯,可与任何支援dialback协议的Jabber服务器"结盟"(federate,此术语即服务器互通之意). --维基百科 Gt ...
- IM互通新方案-GTalk to VoIP回拨服务
IM互通新方案-GTalk to VoIP回拨服务 本文来源: 作者: [字体:大 中 小] ITBear 2007-09-19日消息: MSN和Yahoo已经实现了互通,不过那也仅限于文字消息的 ...
- 评论一下现有几个开源IM框架(Msn/QQ/Fetion/Gtalk...)
---------------- 前言 ---------------- 这阵子,在集成通讯框架, 由于不想自己造轮子,因此参考了现在一些开源的IM框架,结果是..... 让我有点不爽,导致开发的时间 ...
- Jove:@AlanCui 在手机上用QQ或GTalk来贴Fanfou吧, 不用敲空格或省略号. 好像你输入多少个中文字符就要补多少个空格...
Jove:@ AlanCui 在手机上用QQ或GTalk来贴Fanfou吧, 不用敲空格或省略号. 好像你输入多少个中文字符就要补多少个空格
- 9780 RIM gtalk不能使用的解決方案 service not enabled for this handheld
Forward: BB新手,才用9780一個多星期,上服務三天不到.....理解可能不得力 ------------------------------------------------------ ...
- (转)最全的Gtalk使用技巧和方法教程
最近身边好多朋友开始转战Gtalk,我那申请了几年都没说过几句话的Gtalk终于迎来了春天.松松哥在评 论中说,GTalk不是所有人都会用.现在我就把给他们整理的一些小资料分享给大家,咱也见证下Gta ...
最新文章
- VS2017中使用码云上传项目以及问题汇总
- 分析器错误(在浏览器中查看.aspx)
- docker api 基本介绍和使用
- C++ 动态库导出函数名“乱码”及解决
- servlrt程序的入口点是_刚刚,微信偷偷更新,小程序又放大招了!
- 发布到服务器接口404_接口测试怎么做?
- LeetCode 1912. 设计电影租借系统(map+set)
- elementui的upload组件怎么获取上传的文本流、_抖音feed流直播间引流你还不会玩?实操讲解...
- android实践练习_android 练习之路 (四)
- mysql会更改原excel吗,上传到mysql时,excel的日期发生变化
- 修改初始Manager QuerySets,重写Manager.get_query_set()函数之后,发现并没有按照我们指定的方法执行。...
- 【OpenCV学习笔记】【函数学习】十六(Rect参数介绍)
- 计算机学院毕业生德育总结,毕业生德育答辩总结_相关文章专题_写写帮文库
- python试题库_python 题库
- 三字经带注解_三字经注释及解析
- 汉字转拼音函数SQLSERVER数据库
- SQL Server跟踪(Trace)--系统跟踪日志;从小白到大神,文章细节满满,细致到令人发指。
- java (零钱通)
- 100年量子计算风云史,“量子比特”何时统治世界?| 技术特稿
- Linux的rm-rf