Pengenalan Dasar Fungsi SD Card dan Penggunaan Melalui Aplikasi
External Storage / SD Card pada perangkat Mobile
External storage adalah storage yang berfungsi untuk meyimpan data dari luar main storage dalam waktu yang sangat atau relative lama, biasanya external storage digunakan untuk menampung data dalam jumlah yang sangat besar.
Setiap perangkat yang kompatibel dengan system operasi android harus mendukung media penyimpanan eksternal yang dapat digunakan untuk menyimpan file. Media penyimpanan ini bisa pula menjadi media penyimpanan yang removable.
Selain itu, tidak ada system keamanan yang diberlakukan pada file yang disimpan dalam external storage. Semua aplikasi dapat membaca, menulis, dan menghapus file yang ditempatkan di external storage.
Sebelum membaca atau menulis file dari dan kedalam external storage, terlebih dahulu program harus memeriksa ketersediaan media, karena terdapat kemungkinan bahwa user tidak memasukkan SD card kedalam slotnya.
Sifat-Sifat
- Memori eksternal disebut juga Secondary-Memory memiliki ukuranvolume yang relatif besar, bahkan bisa sangat besar sampai ordo Tera Byte (TB), digunakan sebagai “storage” atau gudang penyimpanan data dan Program.
- Memiliki kecepatan akses data yang relatif lebih lamban jika dibandingkan dengan Main Memory (RAM)
- Program dan Data yang disimpan biasanya dalam keadaan tidak “aktif” , misal dalam bentuk terkompresi (.ZIP) , atau programprogram yang belum di-instal.
- Oleh CPU digunakan sebagai “Virtual Memory”
Jenis-jenis External Storage / SD Card
- Berdasarkan Jenis Akses Data
Berdasarkan jenis aksesnya memori eksternal dikelompokkan menjadi dua jenis yaitu :
- DASD (Direct Access Storage Device) di mana ia mempunyai akses langsung terhadap data. Contoh : Magnetik (floppy disk, hard disk); Removeable hard disk (Zip disk, Flash disk); Optical Disk.
- SASD (Sequential Access Storage Device) : Akses data secara tidak langsung (berurutan), seperti pita magnetik.
- Berdasarkan Karakteristik Bahan
Berdasarkan karakteristik bahan pembuatannya, memori eksternal digolongkan menjadi beberapa kelompok sebagai berikut:
- Punched Card atau kartu berlubang
Merupakan kartu kecil berisi lubang-lubang yang menggambarkan berbagai instruksi atau data. Kartu ini dibaca melalui puch card reader yang sudah tidak digunakan lagi sejak tahun 1979.
- Magnetic Disk
Magnetic Disk merupakan disk yang terbuat dari bahan yang bersifat magnetik, Contoh : floppy dan harddisk.
- Optical Disk
Optical disk terbuat dari bahan-bahan optik, seperti dari resin (polycarbonate) dan dilapisi permukaan yang sangat reflektif seperti alumunium. Contoh : CD dan DVD
- Magnetic Tape
Sedangkan magnetik tape, terbuat dari bahan yang bersifat magnetik tetapi berbentuk pita, seperti halnya pita kaset tape recorder.
- Multiple Disk
- harddisk
disebut juga dengan cakram keras berbentuk piringan hitam terbuat dari alumunium dan dilapisi bahan magnetic. Hard disk sudah menjadi komponen utama dari PC untuk sistem operasi. Komponen bagian hard disk terdiri dari sebuah jarum untuk membaca data di cakram. - flashdisk
Adalah piranti penyimpan dari floppy drive jenis lain yang mempunyai kapasitas memori 128 MB, dengan menggunakan kabel interface jenis USB (Universal Serial Bus), sangat praktis dan ringan dengan ukuran berkisar 96 x 32 mm dan pada bagian belakang bentuknya agak menjurus keluar, digunakan untuk tempat penyimpanan baterai jenis AAA dan terdapat port USB yang disediakan penutupnya yang berbentuk sama dengan body utamanya dan juga mempunyai layar LCD yang berukuran 29,5 x 11 mm. - floppydisk
Karakteristik disket adalah head menyentuh permukaan disk saat membaca ataupun menulis. - CD ROM
(Compact Disk – Read Only Memory). Merupakan generasi CD yang diaplikasikan sebagai media penyimpan data komputer. Dikenalkan pertama kali oleh Phillips dan Sony tahun 1984 dalam publikasinya, yang dikenal dengan Yellow Book. Perbedaan utama dengan CD adalah CD ROM player lebih kasar dan memiliki perangkat pengoreksi kesalahan, untuk menjamin keakuratan tranfer data ke komputer. - CD-R
(Compact Disk Recordables) Secara fisik CD-R merupakan CD polikarbonat kosong berdiameter 120 mm sama seperti CD ROM. Perbedaannya adanya alur – alur untuk mengarahkan laser saat penulisan. Awalnya CD-R dilapisi emas sebagai media refleksinya. Permukaan reflektif pada lapisan emas tidak memiliki depresi atau lekukan – lekukan fisik seperti halnya pada lapisan aluminium sehingga harus dibuat tiruan lekukan antara pit dan land-nya.
- RAID
RAID (Redundancy Array of Independent Disk) merupakan organisasi disk memori yang mampu menangani beberapa disk dengan sistem akses paralel dan redudansi ditambahkan untuk meningkatkan reliabilitas. Karena kerja paralel inilah dihasilkan resultan kecepatan disk yang lebih cepat. Teknologi database sangatlah penting dalam model disk ini karena pengontrol disk harus mendistribusikan data pada sejumlah disk dan juga membacaan kembali.
Tiga karakteristik umum pada tingkatan RAID yaitu :
- RAID adalah merupakan sekumpulan disk drive yang dianggap oleh sistem oprasi sebagai sebuah drive logic tunggal
- Data didistribusikan ke drive fisik array.
- Kapasitas redudant disk digunakan untuk menyimpan informasi paritas yang menjamin recovability data terjadi kegagalan disk.
RAID-0
Tidak Memiliki Redundansi – BUKAN RAID YG SEBENARNYA
- Data di strip dan disebar ke seluruh disk
- Round Robin striping
- Kecepatan Akses Tinggi
- Multiple data requests terjadi tdk dalam satu disk
- Pencarian data dilakukan secara paralel
- Sebuah data secara fisik tersebar terdistribusi pada keseluruhan disk
RAID-1
- Mirrored Disks , artinya selurugh disk memiliki bayangan duplikatnya masing-masing
- Data di – strip keseluruh disk
- Masing-masing data memiliki “duplikat” pada disk yg lain.
- Proses Baca bisa pada salah satu disk, tapi proses Tulis dilakukan pada kedua disk yaitu asli dan duplikatnya.
- Recovery bersifat sederhana
- Swap faulty disk & re-mirror
- No down time
- Sangat Mahal , karena biaya keseluruhan disk menjadi 2x lipat
RAID-2-
- Gerakan semua Disk Disinkronisasikan satu sama lain
- stripes yang digunakan berukuran sangat kecil
- Often single byte/word
- Error correction dihitung antar disk
- Multiple parity disks menggunakan Hamming Code
- Redundancy disknya masih terlalu banyak
- Sangat Mahal
- Jarang digunakan
RAID-3-
Serupa dengan RAID-2
- Hanya ada sebuah redundant-disk tunggal, untuk semua disk
- Hanya menggunakan sistem Parity-Bit untuk recovery
- Data pada disk yang mengalami kegagalan di-recovery dari parity Bit yang ada rudundant di
- yang ada pada redundant disl
- Kecepatan Transfer Data sangat Tinggi
RAID-4
- Setiap disk dioperasikan secara independent , tdk disinkronisasi
- Cocok untuk kebutuhan akses I/O yang tinggi
- Ukuran Stripes besar-besar
- Bit by bit parity dihitung untuk setiap disk
- Parity bit disimpan di redundant disk
RAID-5
- Seperti RAID-4
- Parity bit disebar pada seluruh disk, termasuk redundant disk
- Alokasi Parity Bit disusun secara Round robin
- Mencegah bottleneck at redundant disk
- Umum digunakan untuk network servers
RAID-6
- Double Parity P() dan Q()
- Disebar merata keseluruh disk
- Kebutuhan N disks adalah N+2
- Cocok untuk data volume tinggi
- RAM
Random access memory, RAM adalah sebuah tipe penyimpanan komputer yang isinya dapat diakses dalam waktu yang tetap tidak memperdulikan letak data tersebut dalam memori.
Pengertian lain : RAM (Random-Acces Memory) merupakan salah satu jenis memory internal yang menentukan kemampuan sebuah komputer. Memory internal (Internal Memory) bisa disebut juga memory utama (main memory) dan memory primer (primary memory). Komponen ini berfungsi sebagai pengingat.
- FLASH DISK
USB flash drive adalah alat penyimpanan data memori flash tipe NAND yang memiliki alat penghubung USB yang terintegrasi. Flash drive ini biasanya berukuran kecil, ringan, serta bisa dibaca dan ditulisi dengan mudah. Per November 2006, kapasitas yang tersedia untuk USB flash drive ada dari 128 megabyte sampai 64 gigabyte.
- USB flash drive memiliki banyak kelebihan dibandingkan alat penyimpanan data lainnya, khususnya disket atau cakram padat. Alat ini lebih cepat, kecil, dengan kapasitas lebih besar, serta lebih dapat diandalkan
SD Card pada Android Emulator Device(AVD).
AVD (Android Virtual Devices) adalah konfigurasi dari emulator sehingga kita dapat menjalankan perangkat Android sesuai model yang dipilih, misal Android 1.5 atau 2.2 dan seterusnya. Untuk dapat menjalankan emulator, kawan-kawan harus terlebih dahulu memiliki Android SDK. Tapi tenang , kemarin kita telah menginstalnya dengan baik
Setiap AVD terdiri dari:
- Sebuah profil perangkat keras. Kawan-kawan dapat mengatur opsi untuk menentukan fitur hardware emulator. Misalnya, menentukan apakah menggunakan perangkat kamera, apakah menggunakan keyboard QWERTY fisik atau tidak, berapa banyak memori internal, dan lain-lain.
- Sebuah pemetaan versi Android. Kawan-kawan dapat menentukan versi dari platform Android akan berjalan pada emulator.
- Pilihan lainnya. kawan-kawan dapat menentukan skin yang ingin di gunakan pada emulator, yang memungkinkan untuk menentukan dimensi layar, tampilan, dan sebagainya. Selain itu kita juga dapat menentukan SD Card virtual untuk digunakan dengan di emulator.
Tata Cara penggunaan SdCard pada android (Android-Studio)
Ketika kita membuat sebuah aplikasi android khusus untuk membaca file/SdCard perlu ada beberapa langkah
yaitu :
- Khusus untuk android dengan versi sdk dibawah android Lolipop (5.0) hanya perlu menambahkan <uses-permission />
2. Untuk android versi SDK diatas Lolipop (5.0) perlu ijin User secara langsung bai pertama kali diinstal atau ketika dijalankan
PROJECT SEDERHANA SDCARD(Musik Player Menggunakan Cursor)
Pada sesi kali ini kita akan membuat projek android dimana hasilnya akan menampilkan lagu yang ada di android dan memutarnya untuk hasil akhirnya kurang lebih seperti ini :
Oke pertama-tama kita buat projek baru pada android studio karna sudah kita bahas di rps sebelumnya untuk membuat projek baru maka langsung saja kita buat…kita hanya akan menggunakan 1 Activity 1 class adapter baik kita mulai
- Pada AndroidManifest.xml tambahkan permission EXTERNAL_STORAGE
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.kelompok3.trian.pmo2_rps2"> <uses-permission android:name="android.permission.WAKE_LOCK" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme"> <activity android:name=".MainActivity" android:launchMode="singleTop" android:screenOrientation="portrait"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <!-- TODO : tambah service --> <activity android:name=".player"></activity> </application> </manifest>
2. Kemudian kita buat laoyutnya
activity_main.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:orientation="vertical" android:layout_height="match_parent" tools:context=".MainActivity"> <FrameLayout android:layout_width="match_parent" android:layout_height="wrap_content"> <LinearLayout android:layout_width="match_parent" android:layout_height="200dp" android:background="#535353"> </LinearLayout> <ImageView android:id="@+id/iv_cover" android:layout_width="100dp" android:layout_gravity="right|center" android:layout_height="100dp" android:layout_marginEnd="5dp" android:scaleType="fitXY" android:src="@drawable/background"/> <LinearLayout android:layout_width="match_parent" android:layout_height="200dp" android:orientation="vertical"> <include layout="@layout/toolbar" /> <TextView android:id="@+id/txt_judul" android:layout_width="wrap_content" android:layout_marginEnd="100dp" android:layout_height="wrap_content" android:paddingLeft="28dp" android:text="hehe" android:maxLines="2" android:maxLength="52" android:textColor="#ffffff" android:layout_marginTop="10dp" android:textSize="17dp" /> <TextView android:id="@+id/txt_artis" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="6dp" android:paddingLeft="28dp" android:text="Taylor Swift" android:textSize="13dp" android:textColor="#ffffff" /> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="6dp" android:paddingLeft="29dp" android:text="_" android:textColor="#ffffff" android:textSize="10dp" /> <SeekBar android:id="@+id/seekbar" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginLeft="20dp" android:layout_marginRight="20dp" android:layout_marginTop="20dp" android:progressBackgroundTint="#ffff" android:theme="@style/MySeekBarTheme" /> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginBottom="15dp" android:layout_marginLeft="7dp" android:layout_marginRight="8dp" android:layout_marginTop="3dp" android:orientation="horizontal"> <TextView android:id="@+id/txt_durasi_awal" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_weight="1" android:paddingLeft="26dp" android:text="00:00" android:textColor="#ffffff" android:textSize="10dp" /> <TextView android:id="@+id/txt_durasi_max" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_weight="1" android:gravity="end" android:paddingRight="26dp" android:text="00:00" android:textColor="#ffffff" android:textSize="10dp" /> </LinearLayout> </LinearLayout> </FrameLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginBottom="17dp" android:layout_marginTop="17dp" android:orientation="horizontal"> <ImageView android:layout_width="match_parent" android:layout_height="18dp" android:layout_gravity="center" android:layout_weight="1" android:paddingLeft="28dp" android:src="@drawable/ic_repeat" /> <ImageView android:id="@+id/btn_prev" android:layout_width="match_parent" android:layout_height="20dp" android:layout_gravity="center" android:layout_weight="1" android:paddingLeft="22dp" android:src="@drawable/ic_back" /> <ImageView android:layout_width="match_parent" android:layout_height="50dp" android:layout_gravity="center" android:layout_marginLeft="11dp" android:layout_marginRight="11dp" android:layout_weight="1" android:id="@+id/btn_play" android:background="@drawable/circle" android:padding="15dp" android:src="@drawable/ic_pause" /> <ImageView android:id="@+id/btn_next" android:layout_width="match_parent" android:layout_height="20dp" android:layout_gravity="center" android:layout_weight="1" android:paddingRight="22dp" android:src="@drawable/ic_forward" /> <ImageView android:layout_width="match_parent" android:layout_height="18dp" android:layout_gravity="center" android:layout_marginRight="28dp" android:layout_weight="1" android:src="@drawable/ic_shuffle" /> </LinearLayout> <ListView android:id="@+id/daftarmusik" android:layout_width="match_parent" android:layout_height="wrap_content"> </ListView> </LinearLayout>
3.Pada MainActivity.java
tambahkan
package com.kelompok3.trian.pmo2_rps2; import android.content.ContentResolver; import android.content.Intent; import android.content.pm.PackageManager; import android.database.Cursor; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.drawable.Drawable; import android.media.MediaPlayer; import android.net.Uri; import android.os.Parcelable; import android.provider.MediaStore; import android.support.v4.app.ActivityCompat; import android.support.v4.content.ContextCompat; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.AdapterView; import android.widget.ImageView; import android.widget.ListView; import android.widget.SeekBar; import android.widget.TextView; import android.widget.Toast; import com.kelompok3.trian.pmo2_rps2.hoho.tulung; import java.io.IOException; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; public class MainActivity extends AppCompatActivity implements View.OnClickListener,ActivityCompat.OnRequestPermissionsResultCallback{ private ArrayList<Song> listmusik; public static final int MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE = 99; private ListView vielistmusik; //TODO : variabel int posisi = 0; ImageView next,prev,play,cover; TextView judul,artis,durasi_awal,durasi_akhir; SeekBar seek; MediaPlayer mp; Thread update; boolean status_play = false; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); next = findViewById(R.id.btn_next); prev = findViewById(R.id.btn_prev); play = findViewById(R.id.btn_play); judul = findViewById(R.id.txt_judul); artis = findViewById(R.id.txt_artis); cover = findViewById(R.id.iv_cover); seek = findViewById(R.id.seekbar); durasi_akhir = findViewById(R.id.txt_durasi_max); durasi_awal = findViewById(R.id.txt_durasi_awal); play.setOnClickListener(this); next.setOnClickListener(this); prev.setOnClickListener(this); judul.setText(""); artis.setText(""); checkStoragePermission(); vielistmusik = findViewById(R.id.daftarmusik); listmusik = new ArrayList<>(); getListMusik(); Collections.sort(listmusik, new Comparator<Song>() { @Override public int compare(Song a, Song b) { return a.getJudul().compareTo(b.getJudul()); } }); AdapterSong adapter = new AdapterSong(MainActivity.this,listmusik); vielistmusik.setAdapter(adapter); } public void getListMusik(){ ContentResolver musicresolver = getContentResolver(); Uri urimusik = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI; Uri uriart = MediaStore.Audio.Albums.EXTERNAL_CONTENT_URI; Cursor cursormusik = musicresolver.query(urimusik,null,null,null,null,null); Cursor cursoralbum = musicresolver.query(uriart,null,null,null,null,null); if (cursormusik!=null&& cursormusik.moveToFirst()){ int alamat_palsu = cursormusik.getColumnIndex(MediaStore.Audio.Media.DATA); int cover = cursoralbum.getColumnIndex(MediaStore.Audio.Albums.ALBUM_ART); int titlecolumn = cursormusik.getColumnIndex (MediaStore.Audio.Media.TITLE); int idColumn = cursormusik.getColumnIndex (android.provider.MediaStore.Audio.Media._ID); int artistColumn = cursormusik.getColumnIndex (android.provider.MediaStore.Audio.Media.ARTIST); do { final long thisId = cursormusik.getLong(idColumn); final String data = cursormusik.getString(alamat_palsu); final String thistitle = cursormusik.getString(titlecolumn); final String thisArtist = cursormusik.getString(artistColumn); final String Art = cursormusik.getString(cover); listmusik.add(new Song(thisId,data, thistitle, thisArtist,Art)); kliklistView(); } while (cursormusik.moveToNext()); } } private void kliklistView() { vielistmusik.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { if (mp != null){ mp.stop(); mp.release(); } Uri jalur = Uri.parse(listmusik.get(position).getData()); posisi = position; if (jalur == null ){ }else { judul.setText(listmusik.get(position).getJudul()); artis.setText(listmusik.get(position).getArtis()); mp = MediaPlayer.create(MainActivity.this, jalur); posisi = position; try { mp.start(); } catch (NullPointerException e) { new tulung(MainActivity.this).gawe_toast("Format tidak didukung" + e.getMessage(), true); } catch (Exception e) { new tulung(MainActivity.this).gawe_toast("Format tidak didukung" + e.getMessage(), true); } } play.setImageResource(R.drawable.ic_pause); status_play = true; update = new Thread(){ @Override public void run() { int totalDuration = mp.getDuration(); int currentPosition = 0; while(currentPosition < totalDuration){ try{ sleep(500); currentPosition=mp.getCurrentPosition(); seek.setProgress(currentPosition); durasi_awal.setText(""+milliSecondsToTimer((long) mp.getCurrentPosition())); durasi_akhir.setText(""+milliSecondsToTimer((long)mp.getDuration())); } catch (InterruptedException e){ e.printStackTrace(); } } } }; update.start(); try { seek.setMax(mp.getDuration()); }catch (NullPointerException e){ new tulung(MainActivity.this).gawe_toast("tidak ada lagu",true); } seek.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { } @Override public void onStartTrackingTouch(SeekBar seekBar) { } @Override public void onStopTrackingTouch(SeekBar seekBar) { mp.seekTo(seekBar.getProgress()); } }); } }); } public String milliSecondsToTimer(long milliseconds) { String finalTimerString = ""; String secondsString = ""; // TODO: Convert total duration into time int hours = (int) (milliseconds / (1000 * 60 * 60)); int minutes = (int) (milliseconds % (1000 * 60 * 60)) / (1000 * 60); int seconds = (int) ((milliseconds % (1000 * 60 * 60)) % (1000 * 60) / 1000); // TODO:Add hours if there if (hours > 0) { finalTimerString = hours + ":"; } // TODO:Prepending 0 to seconds if it is one digit if (seconds < 10) { secondsString = "0" + seconds; } else { secondsString = "" + seconds; } finalTimerString = finalTimerString + minutes + ":" + secondsString; // TODO:return timer string return finalTimerString; } @Override public void onClick(View v) { switch (v.getId()){ //TODO : tombolplay dan pause case R.id.btn_play: try { seek.setMax(mp.getDuration()); }catch (NullPointerException e){ new tulung(MainActivity.this).gawe_toast("tidak ada lagu",true); } if (mp.isPlaying()){ try { mp.pause(); }catch (NullPointerException e){ new tulung(MainActivity.this).gawe_toast("Format tidak didukung"+e.getMessage(),true); }catch (Exception e){ new tulung(MainActivity.this).gawe_toast("Format tidak didukung"+e.getMessage(),true); } play.setImageResource(R.drawable.ic_play); status_play = false; }else { try { mp.start(); }catch (NullPointerException e){ new tulung(MainActivity.this).gawe_toast("Format tidak didukung"+e.getMessage(),true); }catch (Exception e){ new tulung(MainActivity.this).gawe_toast("Format tidak didukung"+e.getMessage(),true); } play.setImageResource(R.drawable.ic_pause); status_play = true; } // new tulung(this).gawe_toast("gg",true); break; case R.id.btn_next: mp.stop(); mp.release(); int pos=((posisi) +1)%listmusik.size(); posisi = pos; Uri u = Uri.parse(listmusik.get( pos).getData()); judul.setText(listmusik.get(pos).getJudul()); artis.setText(listmusik.get(pos).getArtis()); mp = MediaPlayer.create(getApplicationContext(),u); mp.start(); break; case R.id.btn_prev: mp.stop(); mp.release(); int pos2 =((posisi-1)<0)?(listmusik.size()-1):(posisi-1); Uri u2 = Uri.parse(listmusik.get(pos2).getData());//%mysongs so that it do not go to invalid judul.setText(listmusik.get(pos2).getJudul()); artis.setText(listmusik.get(pos2).getArtis()); mp = MediaPlayer.create(getApplicationContext(),u2); mp.start(); break; } } public boolean checkStoragePermission() { if (ContextCompat.checkSelfPermission(MainActivity.this, android.Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { if (ActivityCompat.shouldShowRequestPermissionRationale(this, android.Manifest.permission.READ_EXTERNAL_STORAGE)) { ActivityCompat.requestPermissions(this, new String[]{android.Manifest.permission.READ_EXTERNAL_STORAGE}, MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE); } else { ActivityCompat.requestPermissions(this, new String[]{android.Manifest.permission.READ_EXTERNAL_STORAGE}, MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE); } return false; } else { return true; } } @Override public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) { switch (requestCode) { case MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE: { if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { if (ContextCompat.checkSelfPermission(MainActivity.this, android.Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) { } } else { new tulung(MainActivity.this).gawe_toast("tdak dapat ijin",true); } return; } } } }
4. kemudian pada class Adapter.java
package com.kelompok3.trian.pmo2_rps2; import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.LinearLayout; import android.widget.TextView; import java.util.ArrayList; import java.util.List; public class AdapterSong extends BaseAdapter { private ArrayList<Song> songs; private LayoutInflater songinf; public AdapterSong(Context c, ArrayList<Song> thesongs){ songs = thesongs; songinf = LayoutInflater.from(c); } @Override public View getView(int position,View convertView, ViewGroup parent){ LinearLayout layout = (LinearLayout)songinf.inflate( R.layout.item_lagu,parent,false); TextView songView = (TextView)layout.findViewById(R.id.song_title); TextView artistView = (TextView)layout.findViewById(R.id.song_artist); //get song using position Song currSong = songs.get(position); //get title and artist strings songView.setText(currSong.getJudul()); artistView.setText("Artist : "+currSong.getArtis()); //set position as tag layout.setTag(position); return layout; } @Override public int getCount() { return songs.size(); } @Override public Object getItem(int position) { return null; } @Override public long getItemId(int position) { return 0; } }
File PowerPoint
File Sourecode
Daftar Pustaka
http://muhamad-irvansah.blogspot.com/2014/11/pengertian-dan-jenis-jenis-memory_1.html
AVD
https://blogermencobasukses.wordpress.com/2013/03/21/membuat-avd-android-virtual-devices/
http://bisakomputer.com/membuat-dan-konfigurasi-emulator-android/
JENIS EKS STORAGE
http://muhamad-irvansah.blogspot.com/2014/11/pengertian-dan-jenis-jenis-memory_1.html
http://arsyliyah.blogspot.com/2014/04/jenis-jenis-memori-eksternal.html