Tugas 1 ABK di SD prodi pendidikan guru sekolah dasar.docx
Pertemuan 13 - Shared Preferences and Settings.pptx
1. PEMROGRAMAN
BERGERAK
Shared Preferences and Settings
(Preferensi dan Pengaturan Bersama)
Riad Sahara, S.SI., M.T.
Universitas Siber Asia Program Studi:
PJJ Informatika S1
Modul Ke:
13
5. 5
Menyimpan data (Storing data)
● Shared Preferences—Data primitif privat dalam pasangan nilai kunci
● Internal Storage—Data pribadi pada memori perangkat
● External Storage—Data publik di perangkat atau penyimpanan eksternal
● SQLite Databases—Data terstruktur dalam database pribadi
● Content Providers—Simpan secara pribadi dan sediakan untuk umum
6. 6
Storing data beyond Android
●Network Connection—Di web dengan server Anda sendiri
●Cloud Backup—Mencadangkan aplikasi dan data pengguna di cloud
●Firebase Realtime Database—Simpan dan sinkronkan data dengan database
cloud NoSQL di seluruh klien secara realtime.
8. 8
Android File System
●Penyimpanan eksternal -- Direktori publik
●Penyimpanan internal -- Direktori pribadi hanya untuk aplikasi Anda
●Aplikasi dapat menelusuri struktur direktori
●Struktur dan operasi mirip dengan Linux dan java.io
9. 9
Internal storage
●Selalu tersedia
●Menggunakan sistem file perangkat
●Hanya aplikasi Anda yang dapat mengakses file, kecuali secara eksplisit disetel
agar dapat dibaca atau ditulis
●Saat aplikasi dicopot pemasangannya, sistem akan menghapus semua file aplikasi
dari penyimpanan internal
10. 10
Penyimpanan eksternal (External storage)
●Tidak selalu tersedia, dapat dihapus
●Menggunakan sistem file perangkat atau penyimpanan eksternal fisik seperti kartu
SD
●Dapat dibaca dunia, sehingga aplikasi apa pun dapat membaca
●Saat uninstall, sistem tidak menghapus file pribadi ke aplikasi
11. 11
Kapan menggunakan
penyimpananinternal/eksternal?
Internal adalah yang terbaik ketika
●Anda ingin memastikan bahwa baik pengguna maupun aplikasi lain tidak dapat
mengakses file Anda
Eksternal adalah yang terbaik untuk file yang
●Tidak memerlukan pembatasan akses dan untuk
●Anda ingin berbagi dengan aplikasi lain
●Anda mengizinkan pengguna untuk mengakses dengan komputer
12. 12
Menyimpan file pengguna di penyimpanan bersama
●Simpan file baru yang diperoleh pengguna melalui aplikasi Anda ke direktori
publik tempat aplikasi lain dapat mengaksesnya dan pengguna dapat dengan
mudah menyalinnya dari perangkat.
●Menyimpan file eksternal di direktori public.
14. 14
Penyimpanan Internal (Internal Storage)
●Menggunakan direktori pribadi hanya untuk aplikasi Anda
●Aplikasi selalu memiliki izin untuk membaca / menulis
●Direktori penyimpanan permanen—getFilesDir()
●Direktori penyimpanan sementara—getCacheDir()
15. 15
Membuat file
File file = new File(
context.getFilesDir(), filename);
Gunakan sta.ndar java.io Operator atau aliran file untuk berinteraksi dengan file
17. 17
External Storage
●Pada perangkat atau kartu SD
●Menyetel izin di Manifes Android
○Izin menulis mencakup izin baca
<uses-permission
android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission
android:name="android.permission.READ_EXTERNAL_STORAGE" />
18. 18
Selalu periksa ketersediaan penyimpanan
public boolean isExternalStorageWritable() {
String state = Environment.getExternalStorageState();
if (Environment.MEDIA_MOUNTED.equals(state)) {
return true;
}
return false;
}
19. 19
Contoh external public directories
• DIRECTORY_ALARMS and DIRECTORY_RINGTONES
Untuk file audio untuk digunakan sebagai alarm dan nada dering
• DIRECTORY_DOCUMENTS
Untuk dokumen yang telah dibuat oleh pengguna
DIRECTORY_DOWNLOADS
Untuk file yang telah diunduh oleh pengguna
developer.android.com/reference/android/os/Environment.html
20. 20
Mengakses direktori eksternal publik
• Dapatkan jalur getExternalStoragePublicDirectory()
• Buat file
File path = Environment.getExternalStoragePublicDirectory(
Environment.DIRECTORY_PICTURES);
File file = new File(path, "DemoPicture.jpg");
21. 21
Berapa banyak penyimpanan yang tersisa?
●Jika tidak ada cukup ruang, gunakan IOException
●Jika Anda mengetahui ukuran file, periksa ruang
○ getFreeSpace()
○ getTotalSpace().
●Jika Anda tidak tahu berapa banyak ruang dibutuhkan
○ try/catch IOException
22. 22
Menghapus file tidak lagi diperlukan
●Penyimpanan eksternal
myFile.delete();
●Penyimpanan internal
myContext.deleteFile(fileName);
23. 23
Jangan hapus file pengguna!
Saat pengguna meng-uninstal aplikasi Anda, direktori penyimpanan pribadi aplikasi
dan semua kontennya akan dihapus
Jangan gunakan penyimpanan pribadi untuk konten milik pengguna!
Misalnya:
Foto yang diambil atau diedit dengan aplikasi Anda
●Musik yang telah dibeli pengguna dengan aplikasi Anda
25. 25
SQLite Database
●Ideal untuk data berulang atau terstruktur, seperti kontak
●Android menyediakan database seperti SQL
●Tercakup dalam bab-bab berikut dan praktiknya
○SQLite Primer
○Pengantar SQLite Database
○SQLite Data Storage Praktis
○Mencari Database SQLite Praktis
26. 26
Preferensi Bersama (Shared Preferences)
●Membaca dan menulis sejumlah kecil data primitif sebagai pasangan kunci/nilai
ke file di penyimpanan perangkat
●Dibahas dalam bab selanjutnya dan praktis
○Preferensi Bersama
28. 28
Menggunakan Firebase untuk menyimpan dan berbagi data
Menyimpan dan menyinkronkan data dengan
database cloud Firebase
Data disinkronkan di semua klien, dan tetap
tersedia saat aplikasi Anda offline
firebase.google.com/docs/database/
29. 29
Firebase Realtime Database
●Aplikasi yang terhubung berbagi data
●Dihosting di cloud
●Data disimpan sebagai JSON
●Data disinkronkan secara realtime ke setiap klien
yang terhubung
30. 30
Koneksi Jaringan (Network Connection)
●Anda dapat menggunakan jaringan (bila tersedia) untuk menyimpan dan
mengambil data pada layanan berbasis web Anda sendiri
●Gunakan kelas dalam paket berikut
○java.net.*
○android.net.*
31. 31
Backing up data
●Auto Backup untuk 6.0 (API level 23) dan yang lebih tinggi
●Mencadangkan data aplikasi ke cloud secara otomatis
●Tidak perlu kode dan gratis
●Menyesuaikan dan mengonfigurasi pencadangan otomatis untuk
aplikasi Anda
●Lihat Configuring Auto Backup for Apps
32. 32
Backup API untuk Android 5.1 (API level 22)
• Daftar ke Android Backup Service untuk mendapatkan Backup Service Key
• Mengonfigurasi Manifes untuk menggunakan Layanan Pencadangan
• Membuat agen cadangan dengan memperluas kelas BackupAgentHelper
• Meminta pencadangan saat data telah berubah
• More info and sample code: Using the Backup AP dan Data Backup
33. 33
Pelajari file lebih lanjut
● Menyimpan File
● dokumentasi getExternalFilesDir() dan sampel kode
● getExternalStoragePublicDirectory() dokumentasi dan sampel kode
● kelas java.io.File
● Oracle Java I / O Tutorial
34. 34
Pelajari selengkapnya tentang pencadangan
●Mengonfigurasi Pencadangan Otomatis untuk Aplikasi
●Menggunakan API Cadangan
●Pencadangan Data
37. 37
Apa itu Preferensi Bersama?
●Membaca dan menulis sejumlah kecil data primitif sebagai pasangan
kunci/nilai ke file di penyimpanan perangkat
●Kelas SharedPreference menyediakan API untuk membaca, menulis,
dan mengelola data ini
●Simpan data di onPause()
pulihkan di onCreate()
38. 38
Preferensi Bersama DAN Status Instans Tersimpan
(Shared Preferences AND Stored Instance State)
• Sejumlah kecil pasangan kunci/nilai
• Data bersifat pribadi untuk aplikasi
39. 39
Shared Preferences vs. Saved Instance State (Preferensi
Bersama vs. Status Instans Tersimpan)
• Mempertahankan data di seluruh sesi
pengguna, meskipun aplikasi dihentikan
dan dimulai ulang, atau perangkat di-
boot ulang
• Data yang harus diingat di seluruh sesi,
seperti setelan pilihan pengguna atau
skor game mereka
• Penggunaan umum adalah untuk
menyimpan preferensi pengguna
• Mempertahankan data status di seluruh
instans aktivitas dalam sesi pengguna
yang sama
• Data yang tidak boleh diingat di
seluruh sesi, seperti tab yang saat ini
dipilih atau status aktivitas saat ini.
• Penggunaan umum adalah untuk
membuat ulang status setelah perangkat
diputar
•
40. 40
Membuat Preferensi Bersama
●Hanya perlu satu file Preferensi Bersama per aplikasi
●Beri nama dengan nama paket aplikasi Anda—unik dan mudah
dikaitkan dengan aplikasi
●Argumen MODE untuk getSharedPreferences() adalah untuk
kompatibilitas mundur—gunakan hanya MODE_PRIVATE agar aman
42. 42
Menyimpan preferensi bersama (Saving Shared
Preferences)
●SharedPreferences.Editor interface
●Menangani semua operasi file
●metode put menimpa jika ada kunci
●apply() menyimpan secara asinkron dan aman
44. 44
Restoring Shared Preferences
(Memulihkanpreferensi bersama)
●Memulihkan di onCreate() dalam Aktivitas
●Metode get mengambil dua argumen—kunci, dan nilai default jika kunci tidak
dapat ditemukan.
●Gunakan argumen default sehingga Anda tidak perlu menguji apakah preferensi
ada dalam file.
46. 46
Clearing
●Call clear() on the SharedPreferences.Editor dan menerapkan perubahan
●Anda dapat menggabungkan panggilan untuk put dan clear. Namun, ketika Anda
Apply (), clear () selalu dilakukan terlebih dahulu, terlepas dari urutannya!
49. 49
Listening to changes
●Terapkan antarmuka
SharedPreference.OnSharedPreferenceChangeListener
●Daftar listener dengan registerOnSharedPreferenceChangeListener()
●Mendaftarkan dan membatalkan pendaftaran pendengar di
onResume() and onPause()
●Terapkan pada callback onSharedPreferenceChanged()
50. 50
Antarmuka dan panggilan balik
(Interface and callback)
public class SettingsActivity extends AppCompatActivity
implements OnSharedPreferenceChangeListener { ...
public void onSharedPreferenceChanged(
SharedPreferences sharedPreferences, String key) {
if (key.equals(MY_KEY)) {
// Do something
}
}
}
51. 51
Creating and registering listener
SharedPreferences.OnSharedPreferenceChangeListener listener =
new SharedPreferences.OnSharedPreferenceChangeListener() {
public void onSharedPreferenceChanged(
SharedPreferences prefs, String key) {
// Implement listener here
}
};
prefs.registerOnSharedPreferenceChangeListener(listener);
52. 52
Anda membutuhkan referensi KUAT untuk pendengar
●Saat mendaftarkan pendengar, manajer preferensi tidak menyimpan referensi yang
kuat kepada pendengar
●Anda harus menyimpan referensi yang kuat kepada pendengar, atau akan rentan
terhadap pengumpulan sampah
●Simpan referensi ke listener dalam data instance dari objek yang akan ada selama
Anda membutuhkan listener
54. 54
Pelajari lebih lanjut
● Menyimpan Data
● Opsi Penyimpanan
● Menyimpan Set Kunci-Nilai
● Preferensi Bersama
● SharedPreferences.Editor
Stackoverflow
● How to use SharedPreferences in Android to store, fetch and edit values
● onSavedInstanceState vs. SharedPreferences
58. 58
Apa itu app settings?
●Pengguna dapat mengatur fitur dan perilaku aplikasi
Contoh:
○Lokasi rumah, unit pengukuran default
○Perilaku notifikasi untuk aplikasi tertentu
●Untuk nilai yang jarang berubah dan relevan bagi sebagian besar
pengguna
●Jika nilai sering berubah, gunakan menu opsi atau laci navigasi
62. 62
Mengatur pengaturan Anda
●Jumlah opsi yang dapat diprediksi dan dikelola
●7 atau kurang: atur sesuai prioritas dengan yang paling
penting di atas
●Pengaturan 7-15: Kelompokkan pengaturan terkait di
bawah Pembagi Bagian
64. 64
Lihat versus Preferensi
●Gunakan objek Preferensi alih-alih Lihat objek di layar Pengaturan
Anda
●Mendesain dan mengedit objek Preferensi di editor tata letak seperti
yang Anda lakukan untuk Lihat objek
65. 65
Tentukan Pengaturan di Layar Preferensi(Specify
Settings on the Preferences Screen)
●Menentukan pengaturan di layar
preferensi
●Ini seperti tata letak
●Definisikan dalam:
res > xml > preferences.xml
67. 67
Setiap Preferensi harus memiliki kunci
●Setiap preferensi harus memiliki kunci
●Android menggunakan kunci untuk menyimpan nilai setelan
●<EditTextPreference
android:title="Favorite city"
android:key="fav_city"
… />
69. 69
Switch Preference attributes
●android:defaultValue—true secara default
●android:summary—teks di bawah setelan, untuk beberapa setelan, harus berubah
untuk mencerminkan nilai
●android:title—judul/nama
●android:key—key untuk menyimpan nilai di SharedPreferences
72. 72
ListPreference
●Nilai default -1 tanpa pilihan
●android:entries—Array label untuk tombol radio
●android:entryValues —Tombol radio array nilai
73. 73
Preference class
●Preference class menyediakan View untuk setiap jenis pengaturan
●asosiasi Lihat dengan SharedPreferences antarmuka untuk menyimpan /
mengambil data preferensi
●Menggunakan kunci dalam Preferensi untuk menyimpan nilai pengaturan
74. 74
Subclass Preferece
●CheckBoxPreference—item daftar yang memperlihatkan kotak centang
●ListPreference—Membuka dialog dengan daftar tombol radio
●SwitchPreference—Opsi toggleable dua status
●EditTextPreference—yang membuka dialog dengan EditText
●RingtonePreference—memungkinkan pengguna untuk memilih nada dering
75. 75
Kelas untuk pengelompokan (Classes for grouping)
●PreferenceScreen
○akar hierarki tata letak Preferensi
○di bagian atas setiap layar pengaturan
●PreferenceGroup
○Untuk grup pengaturan (Preference objects).
●PreferenceCategory
○judul di atas grup sebagai pemisah bagian
77. 77
UI Pengaturan menggunakan fragmen
●Menggunakan Aktivitas dengan Fragmen untuk menampilkan layar
Pengaturan
●Gunakan subclass Activity dan Fragment khusus yang menangani
pekerjaan menyimpan setelan
78. 78
Aktivitas dan fragmen untuk setelan
●Android 3.0 dan yang lebih baru:
○AppCompatActivity dengan PreferenceFragmentCompat
○Atau gunakan Activity dengan PreferenceFragment
●Android lebih lama dari 3.0 (API level 10 dan lebih rendah):
○buat aktivitas pengaturan khusus sebagai ekstensi dari kelas
PreferenceActivity (gunakan template!)
Pelajaran
berfokus
pada hal
ini!
79. 79
Langkah-langkah untuk menerapkan Pengaturan
Untuk AppCompatActivity dengan PreferenceFragmentCompat:
●Membuat layar preferensi
●Membuat Aktivitas untuk pengaturan
●Membuat Fragmen untuk setelan
●Menambahkan preferenceTheme ke AppTheme
●Menambahkan kode untuk memanggil UI Pengaturan
80. 80
Template Aktivitas Dasar
● Template Aktivitas Dasar
Termasuk menu opsi
● Settings Item menu disediakan
untuk menu opsi
81. 81
Membuat subkelas Aktivitas Setelan
●Memperluas AppCompatActivity
●di onCreate() menampilkan Fragmen pengaturan:
getSupportFragmentManager()
.beginTransaction()
.replace(android.R.id.content,
new MySettingsFragment())
.commit();
82. 82
Contoh Aktivitas Pengaturan
public class MySettingsActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getSupportFragmentManager().beginTransaction()
.replace(android.R.id.content, new
MySettingsFragment())
.commit();
}
}
This is the
whole class!
83. 83
Membuat subclass Fragmen Setelan
●Extends PreferenceFragmentCompat
●Implementasi Metode:
○ onCreatePreferences() menampilkan pengaturan
○ setOnPreferenceChangeListener() menangani
perubahan apa pun yang perlu terjadi saat pengguna
mengubah preferensi (opsional)
84. 84
PreferenceFragment
public class MySettingsFragment
extends PreferenceFragmentCompat { …}
●Fragmen kosong menyertakan onCreateView() secara default
●Ganti onCreateView() dengan onCreatePreferences()
karena fragmen ini menampilkan layar preferensi
85. 85
Contoh Fragmen Pengaturan
public class MySettingsFragment extends
PreferenceFragmentCompat {
@Override
public void onCreatePreferences(Bundle savedInstanceState,
String rootKey) {
setPreferencesFromResource(R.xml.preferences,
rootKey);
}
}
86. 86
Tambahkan PreferenceTheme ke tema aplikasi
Jika menggunakan PreferenceFragmentCompat, atur preferenceTheme
di styles.xml:
<style name="AppTheme" parent="...">
...
<item name="preferenceTheme">
@style/PreferenceThemeOverlay
</item>
…
</style>
87. 87
Memanggil UI Pengaturan
Kirim Intent untuk memulai Aktivitas Pengaturan:
●Dari menu Opsi, perbarui pada OptionItemsSelected()
●Dari laci Navigasi, perbarui onItemClick() pada OnItemClickListener
diberikan kepada setOnItemClickListener
89. 89
Default settings
●Atur default ke nilai yang akan dipilih sebagian besar pengguna
○ Semua kontak
●Gunakan lebih sedikit daya baterai
o Bluetooth nonaktif hingga pengguna mengaktifkannya
●Risiko paling kecil terhadap keamanan dan kehilangan data
o Mengarsipkan daripada menghapus pesan
●Interupsi hanya jika penting
o Saat panggilan dan pemberitahuan masuk
90. 90
Menetapkan nilai default (Set Default Value)
●Use android:defaultValue in Preference view in xml:
<EditTextPreference
android:defaultValue="London"
… />
●In onCreate() of MainActivity, save default values.
91. 91
Menyimpan nilai default di preferensi bersama
In onCreate() of MainActivity
PreferenceManager.setDefaultValues(
this, R.xml.preferences, false);
●App context, seperti ini
●ID sumber daya file sumber daya XML dengan pengaturan
●Metode false only calls saat pertama kali aplikasi dimulai
93. 93
Menyimpan nilai pengaturan
●Tidak perlu menulis kode untuk menyimpan pengaturan!
●Jika Anda menggunakan Aktivitas Preferensi dan Fragmen khusus,
Android akan otomatis menyimpan nilai setelan di preferensi bersama
94. 94
Mendapatkan pengaturan dari preferensi bersama
●Di kode Anda, dapatkan setelan dari preferensi bersama default
●Gunakan kunci seperti yang ditentukan dalam tampilan preferensi dalam xml
●SharedPreferences sharedPref =
PreferenceManager.getDefaultSharedPreferences(this);
String destinationPref =
sharedPref.getString("fav_city", "Jamaica");
95. 95
Mendapatkan nilai pengaturan dari preferensi bersama
●In preference definition in xml:
<EditTextPreference
android:defaultValue="London"
android:key="fav_city" />
●In code, get fav_city setting:
String destinationPref =
sharedPref.getString("fav_city", "Jamaica");
Nilai pengaturan default
berbeda dari
nilai default dikembalikan
oleh pref.getString() jika
kunci tidak ditemukan di
prefs bersama
97. 97
Mendengarkan perubahan (Listen for chang)
●Menampilkan pengaturan tindak lanjut terkait
●Menonaktifkan atau mengaktifkan pengaturan terkait
●Mengubah ringkasan untuk mencerminkan pilihan saat ini
●Bertindak berdasarkan pengaturan
●Misalnya, jika pengaturan mengubah latar belakang layar, maka ubah
latar belakang
98. 98
Mendengarkan perubahan pada pengaturan (Listen
for changes to settings)
●Define setOnPreferenceChangeListener()
●in onCreatePreferences() in the Settings Fragment
99. 99
onCreatePreferences() example
@Override
public void onCreatePreferences(Bundle savedInstanceState,
String rootKey) {
setPreferencesFromResource(R.xml.preferences, rootKey);
ListPreference colorPref =
(ListPreference)
findPreference("color_pref");
colorPref.setOnPreferenceChangeListener(
// see next slide
// ...);
}
100. 100
onPreferenceChangeListener() example
Contoh: Mengubah warna latar belakang saat mengatur perubahan
colorPref.setOnPreferenceChangeListener(
new Preference.OnPreferenceChangeListener(){
@Override
public boolean onPreferenceChange(
Preference preference, Object newValue){
setMyBackgroundColor(newValue);
return true;
}
});
102. 102
Ringkasan untuk nilai true/false
Mengatur atribut untuk menentukan ringkasan bersyarat untuk preferensi
yang memiliki nilai true/false.
103. 103
Ringkasan untuk pengaturan lain
Untuk pengaturan yang memiliki nilai selain true/false, perbarui ringkasan saat
nilai pengaturan berubah
Mengatur ringkasan di onPreferenceChangeListener()
104. 104
Set summary example
EditTextPreference cityPref = (EditTextPreference)
findPreference("fav_city");
cityPref.setOnPreferenceChangeListener(
new Preference.OnPreferenceChangeListener(){
@Override
public boolean onPreferenceChange(Preference pref, Object
value){
String city = value.toString();
pref.setSummary("Your favorite city is " + city);
return true;
}
});
107. 107
Template Aktivitas Pengaturan (Setting Activity Template)
● Pengaturan Kompleks
● Kompatibilitas mundur
● Menyesuaikan setelan yang
telah diisi sebelumnya
● Tata letak adaptif untuk
ponsel dan tablet
Tablet
Phone
109. 109
Pelajari lebih lanjut
●Panduan Pengguna Android Studio
●Pengaturan (pengkodean)
●Kelas preferensi
●PreferenceFragment
●Fragmen
●Preferensi Bersama
●Menyimpan Set Kunci-Nilai
●Pengaturan (desain)
110. Referensi
1. Google, D. (2021, 09 24). Dasar-Dasar Developer Android. Retrieved from Google Developers:
https://developers.google.com/training/courses/android-fundamentals?hl=id