有时候因为各种外因或内因导致手机在PC端显示两个内部存储的bug.现不多说,直接上代码。
第一步修改的文件:MtpServer.cpp
文件在framework/base下,具体位置自行用命令:find ./ -name MtpServer.cpp 查找
修改内容如下:
void MtpServer::addStorage(MtpStorage* storage){
std::lock_guard<std::mutex> lg(mMutex);
//BEGIN Motorola, dinghao1, Prevent two mobile phone storage on the computer
if(hasStorage(storage->getStorageID())) {
ALOGE("this storage id has been added. so return.");
return;
}
//END
mStorages.push_back(storage);
sendStoreAdded(storage->getStorageID());
}
自此基本可解决问题
如果碰到基线升级等问题引发复现,可再加入第二步修改:
修改文件:MtpDatabase.java
在framework/base下 具体位置自行用命令:find ./ -name MtpDatabase.java 查找
修改内容如下:
public void addStorage(StorageVolume storage) {
MtpStorage mtpStorage = mManager.addMtpStorage(storage);
//BEGIN Motorola,dinghao1 2019-02-20 Prevent two mobile phone storage on the computer.
Log.d(TAG,"storage:" + storage+ "storage.getPath():" + storage.getPath());
removeStorage(storage);
//ENED
mStorageMap.put(storage.getPath(), mtpStorage);
if (mServer != null) {
mServer.addStorage(mtpStorage);
}
}
自此可完美解决问题。