Akses Storage Ponsel – Media Transfer Protocol

By | September 22, 2021
1,315 Views

Akses Storage Ponsel – Backup media ponsel kedalam hardisk PC perlu dilakukan setiap 1 tahun sekali karena begitu banyak sekali media berupa gambar yang disimpan dalam ponsel kita terutama aplikasi whatsapp. Pengalaman saya melakukan akses storage ponsel via PC Explorer terasa lambat sekali, ya maklum ada puluhan ribu media gambar yang tersimpan dalam ponsel. Untuk hal tersebut cara mencari cara terbaik, salah satunya menggunakan bahasa pemrograman. Namun ada sedikit kendala yaitu ternyata akses storage ponsel di windows tidak semuda akses di hardisk. Pada tampilan file explorer seperti berikut

This PC\Galaxy A11\Phone\Android\media\com.whatsapp\WhatsApp

ternyata path diatas adalah virtual path! sehingga kalau kalian akses secara langsung tidak akan bisa, untuk hal tersebut bila menggunakan python kalian butuh library khusus yaitu MTP – Media Transfer Protocol! sesuai referensi dari – How to access an MTP USB device with python – harus install – https://pypi.org/project/PyMTP/ – namun ntah kenapa adanya bugs karena tidak cocok menggunakan separator windows, kalian bisa coba – https://github.com/emdete/python-mtp – Adapun untuk java agak ribet-belum nemu yang pas.

Rencananya dengan copy media ke hard disk PC, maka pengelolaan menjadi lebih cepat daripada diakses ke storage ponsel (malah terkadang hang bila data tersebut ribuan file gambar) untuk kemudian dilakukan hashing image yang bertujuan remove duplicate file yaitu isi dan ukuran sama namun beda nama filenya

Sekilas mengenai Media Transfer Protocol

MTP – media transfer protocol, MTP adalah kependekan dari Media Transfer Protocol. Di buat pertama kali oleh Microsoft yang berfungsi untuk melakukan transfer file agar lebih mudah dimana Android tidak perlu melakukan mounting pada memori eksternal sehingga memori Android jadi lebih aman dan jika tidak di eject dengan baik juga tidak terjadi corrupted file. MTP ini menjadi fitur transfer file default untuk Android dengan OS Jelly Bean ke atas.

MTP ini banyak digunakan saat ini untuk menggantikan atau sebagai alternatif dari Mass-Storage device class (MSC) atau biasa disebut USB Mass Storage. Memang saya pernah pengalaman mengalami file corrupt akibat proses eject yang tidak benar dengan cara langsung mencabut kabel data pada android ketika external memory (microSD) ketika sedang di mount ke laptop. Namun bisa di perbaiki kembali dengan melakukan scandisk pada microsd yang digunakan dari PC :

C:> chkdsk /X /F :

(dijalankan dari cmd)

OK, kembali ke MTP, Media Transfer Protocol ini banyak juga digunakan pada perangkat digital camera dan digital audio player, awalnya dulu pertama kali dipakai di Windows Media Player dan juga oleh digital media player Zune milik Microsoft.

Media Transfer Protocol (sering disebut sebagai MTP) merupakan bagian dari kerangka “Windows Media” dan dengan demikian pastinya terkait erat dengan Windows Media Player. Versi dari sistem operasi Microsoft Windows dari Windows XP SP2 sudah ada dukungan MTP. Dan Windows XP memerlukan Windows Media Player 10 atau lebih tinggi versinya untuk dapat membaca MTP ini. Microsoft juga telah menyediakan sebuah Porting Kit MTP untuk versi Windows 98. Apple Macintosh dan Linux memiliki tolls software sendiri untuk mendukung agar dapat membaca MTP. USB Implementers Forum kemudian menempatkan MTP sebagai standar USB pada Mei 2008.

Kelebihan dari MTP dibandingan dengan Mass-Storage device class (MSC) atau biasa disebut USB Mass Storage adalah lebih aman karena kita tidak perlu melakukan mounting dan un-mount pada disk tersebut, sehingga sangat minim terjadinya file corrupted akibat tidak di lakukan eject secara benar.

Namun kekurangannya yang saya rasakan adalah kita tidak bisa melakukan replace file / folder yang sudah ada, jadi harus dihapus dulu baru di copy jika nama file / folder nya sama. Dan juga untuk transfer rate nya sangat lambat dibandingkan kita copy file dengan metode Mass-Storage device class (MSC) atau biasa disebut USB Mass Storage.

Proses yang terjadi pada MTP :

  • Ketika membuka sebuah file, pengguna harus menunggu sampai berkas ini telah disalin ke PC dulu baru dapat dilihat. (Catatan: file tersebut tetap pada PC hard drive, dan setelah ditutup filenya akan dihapus lagi)
  • Tidak bisa create file baru pada disk MTP ketika di mounting dari PC,jadi  file harus dibuat pada PC dan kemudian di copy ke disk MTP.

Tidak ada pengeditan file pada disk MTP, jadi file harus di edit dulu di PC baru di copy ke disk MTP.

Support pada MTP :


Microsoft
Pada Microsoft Windows, MTP didukung mulai pada Windows XP jika menggunakan Windows Media Player 10. Kemudian Windows Vista, Windows 7 dan seterusnya dimana sudah memiliki dukungan MTP built in Untuk versi Windows, khusus untuk Windows 2000, Windows 98 dan Windows Me, Microsoft telah merilis MTP Porting Kit sendiri yang berisi driver perangkat MTP.

Beberapa produsen, seperti Creative Technology, juga menyediakan driver MTP sendiri dimana biasanya terdiri dari MTP Porting Kit file dengan file INF disesuaikan yang sudah disesuaikan.
Kebanyakan perangkat MTP yang sudah kompatibel tidak di mount manjadi huruf drive (seperti drive C, D, atau F) melainkan muncul sebagai “nama perangkatnya” dalam aplikasi seperti Windows Explorer.

Pada OS Windows, perangkat MTP yang sudah kompatibel mendukung fitur yang disebut AutoSync, yang memungkinkan pengguna mengkonfigurasi Windows Media Player untuk secara otomatis mentransfer konten ke perangkat setiap kali mereka terhubung. AutoSync dapat disesuaikan sehingga bisa mentransfer hanya konten yang memenuhi kriteria tertentu.

Hasil salinan file yang diakses melalui MTP mungkin tetap akan ada pada komputer, bahkan setelah reboot sekalipun. Namun akan hanya dapat diakses oleh user account yang bersangkutan saja. Kecuali user Administrator juga dapat membacanya.

Linux
Dukungan MTP yang stabil ditambahkan ke dalam versi 1.15.2 gvfs (2013/01/15) oleh Philip Langdale. Hal ini memberikan GNOME sebagai aplikasi desktop yang menggunakan file manager Nautilus, gedit dan file-roller memiliki kemampuan untuk mengakses file pada perangkat MTP. Ada beberapa tools Linux lain untuk mengakses perangkat MTP seperti file manager “marlin” dan juga dalam lingkungan desktop lain seperti KDE maupun dari command line dengan menggunakan mtpfs. Kalau saya sih pakai Ubuntu 13.04 dengan file manager nautilus maupun marlin sudah bisa kompatibel dengan MTP disk.

Media Transfer Protocol dengan C#

Untuk menggunakan MTP, kalian butuh library pihak ketiga yaitu https://www.nuget.org/packages/MediaDevices#, contoh berikut saya akan melakukan move file di storage android ke hardisk PC. oiya saya sengaja comment kan kode int total = files.Count(); karena akan sangat lama! mengingat datanya belasan ribu data sehingga enumerasi melakukan langkah yang tepat disetiap enumerasi akan dihitung jumlah file yang terpindah.

 

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using MediaDevices;

namespace ConsoleApp2
{
    class Program
    {
        static void Main(string[] args)
        {
            var devices = MediaDevice.GetDevices();
            using (var device = devices.First(d => d.FriendlyName == "Galaxy A11"))
            {
                device.Connect();
                var photoDir = device.GetDirectoryInfo(@"\Phone\\Android\\media\\com.whatsapp\\WhatsApp\\Media\\WhatsApp Images");

                var files = photoDir.EnumerateFiles("*.jpg", SearchOption.TopDirectoryOnly);
                //int total = files.Count();
                int total = 1;
                foreach (var file in files)
                {
                    Console.WriteLine(file.FullName + " " + total);
                    MemoryStream memoryStream = new System.IO.MemoryStream();
                    device.DownloadFile(file.FullName, memoryStream);
                    device.DeleteFile(file.FullName);
                    memoryStream.Position = 0;
                    WriteSreamToDisk($@"E:\PHOTOS\{file.Name}", memoryStream);
                    
                    total--;
                }
                device.Disconnect();
                Console.ReadLine();
            }

        }

        static void WriteSreamToDisk(string filePath, MemoryStream memoryStream)
        {
            using (FileStream file = new FileStream(filePath, FileMode.Create, System.IO.FileAccess.Write))
            {
                byte[] bytes = new byte[memoryStream.Length];
                memoryStream.Read(bytes, 0, (int)memoryStream.Length);
                file.Write(bytes, 0, bytes.Length);
                memoryStream.Close();
            }
        }
    }
}

Kode diatas berjalan dengan cukup baik melalui Media Transfer Protocol karena ada 2 operasi yaitu copy dan delete file. Berikut tampilan prosesnya

 

ref:

https://stackoverflow.com/questions/25026799/how-to-read-files-on-android-phone-from-c-sharp-program-on-windows-7

http://blog.donyramansyah.net/2013/07/sedikit-tentang-mtp-media-transfer.html