./packages/services/Mtp/src/com/android/mtp/MtpService.java
private final StorageEventListener mStorageEventListener = new StorageEventListener() {
@Override
public void onStorageStateChanged(String path, String oldState, String newState) {
synchronized (MtpService.this) {
Log.d(TAG, "onStorageStateChanged " + path + " " + oldState + " -> " + newState);
if (Environment.MEDIA_MOUNTED.equals(newState)) {
// Updating mVolumes variable because new storage could be inserted
mVolumes = StorageManager.getVolumeList(getUserId(), 0);
for (int i = 0; i < mVolumes.length; i++) {
StorageVolume volume = mVolumes[i];
if (volume.getPath().equals(path)) {
boolean isAdd = false;
if (mVolumeMap.containsKey(path)) {
isAdd = true;
}
mVolumeMap.put(path, volume);
//bug1742334 PTP mode support new storage insert
if (mUnlocked && !isAdd/*&& (volume.isPrimary() || !mPtpMode)*/) {
addStorage(volume);
}
break;
}
}
} else if (Environment.MEDIA_MOUNTED.equals(oldState)) {
// bug1735580 Updating mVolumes variable because storage could be removed
mVolumes = StorageManager.getVolumeList(getUserId(), 0);
if (mVolumeMap.containsKey(path)) {
removeStorage(mVolumeMap.remove(path));
}
}
}
}
};
./frameworks/av/media/mtp/MtpServer.cpp
diff --git a/idh.code/frameworks/av/media/mtp/MtpServer.cpp b/idh.code/frameworks/av/media/mtp/MtpServer.cpp
index ebea14875c3..8fbe2d406d0 100755
--- a/idh.code/frameworks/av/media/mtp/MtpServer.cpp
+++ b/idh.code/frameworks/av/media/mtp/MtpServer.cpp
@@ -137,6 +137,10 @@ MtpServer::~MtpServer() {
void MtpServer::addStorage(MtpStorage* storage) {
std::lock_guard<std::mutex> lg(mMutex);+ // avoid show two MTP devices.
+ if(hasStorage(storage->getStorageID()))
+ return;
+
mStorages.push_back(storage);
sendStoreAdded(storage->getStorageID());
}