android 手机后台播音乐,设置闹钟,打一通电话,挂断电话后,闹钟与音乐同时响起

修改:

frameworks\base\media\java\android\media\MediaFocusControl.java:

1、import packages:

import com.android.internal.telephony.ITelephony;

import android.os.ServiceManager;

2、增加获取当前Phone Call State的方法getPhoneCallState():

private int getPhoneCallState(){

int phoneCallState = TelephonyManager.CALL_STATE_IDLE;

TelephonyManager telephonyManager = (TelephonyManager)mContext.getSystemService(Context.TELEPHONY_SERVICE);

ITelephony telephonyService = ITelephony.Stub.asInterface(ServiceManager.getService(Context.TELEPHONY_SERVICE));

if (telephonyService != null) {

Log.w(TAG, "getPhoneCallState: mTelephonyService != null");

try {

phoneCallState = telephonyService.getPreciseCallState();

Log.w(TAG, "getPhoneCallState: telephonyService.getPreciseCallState() = " + phoneCallState);

} catch (RemoteException ex) {

if(telephonyManager != null){

phoneCallState = telephonyManager.getCallState();

Log.w(TAG, "getPhoneCallState: telephonyManager.getCallState() = " + phoneCallState);

}

Log.w(TAG, "Catch exception when getPreciseCallState: ex = "

+ ex.getMessage());

}

} else {

Log.w(TAG, "getPhoneCallState: telephonyService == null");

if(telephonyManager != null){

phoneCallState = telephonyManager.getCallState();

Log.w(TAG, "getPhoneCallState: telephonyManager.getCallState() = " + phoneCallState);

}

}

Log.w(TAG, "getPhoneCallState: phoneCallState = " + phoneCallState);

return phoneCallState;

}

3、修改

private boolean canReassignAudioFocus() {

// focus requests are rejected during a phone call or when the phone is ringing

// this is equivalent to IN_VOICE_COMM_FOCUS_ID having the focus

if (!mFocusStack.isEmpty() && mFocusStack.peek().hasSameClient(IN_VOICE_COMM_FOCUS_ID)) {

return false;

}

return true;

}

private boolean canReassignAudioFocus() {

// focus requests are rejected during a phone call or when the phone is ringing

// this is equivalent to IN_VOICE_COMM_FOCUS_ID having the focus

if (!mFocusStack.isEmpty() && mFocusStack.peek().hasSameClient(IN_VOICE_COMM_FOCUS_ID) && (getPhoneCallState() != TelephonyManager.CALL_STATE_IDLE)) {

Log.w(TAG, "canReassignAudioFocus: return false");

return false;

}

Log.w(TAG, "canReassignAudioFocus: return true");

return true;

}

时间: 2024-08-29 13:12:42

android 手机后台播音乐,设置闹钟,打一通电话,挂断电话后,闹钟与音乐同时响起的相关文章

Android 手机卫士13--进程设置

1.显示隐藏系统进程 修改ProcessManagerActivity的Adapter ..... @Override public int getCount() { if(SpUtil.getBoolean(getApplicationContext(), ConstantValue.SHOW_SYSTEM, false)){ return mCustomerList.size()+mSystemList.size()+2; }else{ return mCustomerList.size()

Android 手机卫士7--黑名单拦截

1,黑名单数据库创建 三个字段(_id 自增长字段 phone 黑名单号码 mode 拦截类型) 创建表的sql语句 create table blacknumber (_id integer primary key autoincrement , phone varchar(20), mode varchar(5)); 结合项目,去创建数据库,以及相应的表 2.BlackNumberDao  BlackNumberDao单例模式 1 package com.itheima.mobilesafe

Android开发之黑名单来电自动挂断

本实例允许用户动态添加号码到黑名单,并实现黑名单来电自动挂断.程序通过创建PhoneStateListener监听器来监听TelephonyManager的通话状态来实现该功能. 由于自Android 10之后Android不再对外公开挂断电话的API,如果需要挂断电话必须使用AIDL与电话管理Service进行通信,并调用服务中的API实现结束电话. 为了调用远程的AIDL Service,开发者需要将Android源码中的如下两个文拷到指定位置: com.android.internal.t

Android 电话自动接听和挂断详解

1.通过aidl及反射实现挂断电话 具体分三步: (1)ITelephony.aidl ,必须新建com.android.internal.telephony包并放入ITelephony.aidl文件(构建后在gen下有ITelephony.java文件,这是aidl生成的接口),文件内容如下: package com.android.internal.telephony; interface ITelephony{ boolean endCall(); void answerRingingCa

Android手机——读取手机电话+短信+网页+图片+音乐+视频+APK+通知栏消息+换头像

Android手机--电话+短信+网页+图片+音乐+视频+APK+通知栏消息+换头像 <!--拨打电话权限--> <uses-permission android:name="android.permission.CALL_PHONE"/> <!--连接网络权限--> <uses-permission android:name="android.permission.INTERNET"/> <!--读写文件的权限

Exchange邮箱设置,android手机和mac book

假设 用户名:abc 密码:123 公司名是:qq 一 android手机: 1 输入地址:[email protected] 2 密码:123 3 协议:EXCHANGE 点击下一步 用户名:abc 域名:qqcorp 密码:123 服务器:mail.qq.com ==>>是以mail开头的 安全类型:SST/TLS(接受所有证书)  ==>>选择接受所有证书 客户端证书:无 二,mac book 第一步: 名称:abc 电子邮箱地址:[email protected] 密码:1

android手机设置虚拟网络的步骤

上个周五参加麦子学院班会的时候,android开发老师葛老师讲到android手机设置虚拟网络的问题,她说在android手机使用中,经常会需要设置虚拟网络,下面我就给大家回顾一下麦子学院android开发老师讲的虚拟网络的设置,来看看具体设置步骤: 第一步,打开手机主菜单,选择"设置",然后选择"无线和网络" 第二步:选择"虚拟专用网设置" 第三步:选择"添加虚拟专用网" 第四步:选择"添加L2TP/IPSec P

Android手机APN设置(中国移动 联通3G 电信天翼),解决不能上网的问题

中国移动 第一步,设置CMNET上网 新建APN 1.名称:cmnet 2.APN:cmnet 3.APN类型:default 就仅仅填写上面3个选项,其它都是默认,不用填写. 第二步,设置彩信 新建APN 1.名称:cmmms 2.APN:cmwap 3.代理:10.0.0.172 4.port:80 5.username:(空着) 6.password:(空着) 7.server:(空着) 8.MMSC: http://mmsc.monternet.com 9.彩信代理:010.000.00

如何设置Android手机的sqlite3命令环境

转载自:http://blog.csdn.net/ygsyyl/article/details/8144407 1.在PC环境下启动一个模拟器(不是手机) 2.查看模拟器 /systen/xbin是否有sqlite3命令 adb shell cd /system/xbin ls 3.把模拟器 /system/xbin/sqlite3命令文件从模拟器拷到PC上 adb pull /system/xbin/sqlite3 e:/eclipse 4.关闭模拟器,把Android手机连接到PC 5.获取