立即注册
查看: 2159|回复: 0

[MTK软件原创] mt6735 【AudioProfile】如何判断当前文件是否存在?

发表于 2017-12-1 16:00:00 | 显示全部楼层 |阅读模式 来自 广东省深圳市
【AudioProfile】如何判断当前文件是否存在?(system无权限读取SD card问题feature的规避)
[DESCRIPTION]
在AudioProfile这边,是用isRingtoneExist()这个API来判断文件是否存在,但是Android5.1上
google对system访问sd卡做了权限,而导致该API失效。 后来增加了validRingtoneUri这个API来去
判断database里的URI存不存在,。 validRingtoneUri的缺点是一旦遇到文件已经不存在,但是
database没有更新,就会有问题。 现提供新的判断方法。
[SOLUTION]
1.
alps\vendor\MediaTek\proprietary\Frameworks\common\src\com\mediatek\common\audioprofile
\IAudioProfileService.aidl
增加
boolean isRingtoneCanOpen(String UriData);


2. AudioProfileManager.java
增加
public boolean isRingtoneCanOpen(String UriData){
IAudioProfileService service = getService();
try {
return service.isRingtoneCanOpen(UriData);
} catch (RemoteException e) {
Log.e(TAG, "Dead object in isRingtoneCanOpen", e);
return false;
}
}


3. AudioProfileService.java
增加定义
private static final String GET_FILE_IS_EXIST = "GetFileIsExist: ";
增加API
public boolean isRingtoneCanOpen(String UriData){
Log.d(TAG, "isRingtoneCanOpen() UriData= "+UriData);
boolean ret=false;
String validUri=null;
// handle non-file sources
String path= GET_FILE_IS_EXIST + UriData;
validUri = mAudioManager.getParameters(path);
Log.d(TAG, "isRingtoneCanOpen() validUri = "+validUri +", path= "+path);
ret = validUri.equals("-1") ? false : true;
return ret;
}


3. AudioFlinger.cpp
开头增加定义
char GET_FILE_IS_EXIST[] = "GetFileIsExist: "; // ddd file open
在 getParameters()的开头部分增加如下:
ALOGD("+%s(): %s", __FUNCTION__, keys.string());
//start ddd file open
String8 result;
char* strTag;
int lenKey = keys.length();
int lenTag = strlen(GET_FILE_IS_EXIST);
ALOGD("ddd getParameters(): lenKey=%d", lenKey);
strTag = strstr(keys, GET_FILE_IS_EXIST);
ALOGD("getParameters(): strTag=%s", strTag);
if(lenKey > lenTag && strTag!=NULL){
char* url = strTag + lenTag;
ALOGD("getParameters(): url=%s", url);
FILE *m_pInputFile;
m_pInputFile = fopen(url, "r");
if(m_pInputFile == NULL)
{
ALOGE("ddd Couldn't open fd for %s", url);
result = "-1";
}else {
ALOGE("ddd can open fd for %s", url);
result = "9";
fclose(m_pInputFile);
}
return result;
}
//end modify ddd file open


4. ringer.java
在startRingingOrCallWaiting()里调用 ValidRingtoneUri 的地方,增加如下,并且将
ValidRingtoneUri 改用 isRingtoneCanOpen
String dataKey =
audioProfileMgr.getDataKey(audioProfileMgr.getStreamUriKey(audioProfileMgr.getActivePro
fileKey(), AudioProfileManager.TYPE_RINGTONE, slotId));
String uriData = settings.System.getString(mContext.getContentResolver(), dataKey);
Log.d(this, " uriData: "+uriData);
if( false==audioProfileMgr.isRingtoneCanOpen(uriData)){
// if( -1==RingtoneManager.validRingtoneUri(mContext, ringtoneUri)){
Log.d(this, "default ");
ringtoneUri = audioProfileMgr.getDefaultRingtone(AudioProfileManager.TYPE_RINGTONE);
}


5. RingtoneManager.java
将getRingtone()里用到ValidRingtoneUri的地方,可以添加判断条件,将其屏蔽掉,
因为在ringer.java里面已经有判断当前文件是否存在

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

合作/建议

TEL: 19168984579

工作时间:
周一到周五 9:00-11:30 13:30-19:30
  • 扫一扫关注公众号
  • 扫一扫打开小程序
Copyright © 2013-2024 一牛网 版权所有 All Rights Reserved. 帮助中心|隐私声明|联系我们|手机版|粤ICP备13053961号|营业执照|EDI证
在本版发帖搜索
扫一扫添加微信客服
QQ客服返回顶部
快速回复 返回顶部 返回列表