Androidda soxta SMS yozuvchi dastur
Assalom aleykum. Bugungi kunda android qurilmalar ko`pchiligimizning yaqin do`stimizga aylanib bo`ldi. Undan hayotimizning turli xil yumushlarini bajarishda foydalanamiz, sanash mumkin bo`lgan bir-nechta foydali funksiyalardan tashqari undan do`stlaringiz bilan har xil hazillar uyushtirishingiz juda qo`l keladi. Shunaqa qilish mumkin bo`lgan hazillardan biri bu yolg`ondan SMS suhbat uyushtirishdir. Bugun shu haqida gaplashamiz.
Shunday qilib oldimizdagi masala: biror kishining nomidan uning ma`lumotlarini qo`ygan holda undan SMS kelgan deb kiruvchi yangi SMS yaratish.
Androidda SMS ro`yxati
Ilova interfeysi:
Oddiygina faqat uchta parametri kiritiladi: kimdan, xabar matni va xabarni o`qilgan deb belgilanishi. Kiritilgan ma`lumotlar yuqorida yozganimdek sms content provayderga yuboriladi:
Ammo imkoniyatlarni kengaytirib unga _id, thread_id, person, date, protocol, read, status, type, reply_path_present, subject, service_center, locked ma`lumotlarini ham yozishimiz mumkin. Barcha parametrlarni buyerdan topishingiz mumkin.
Shunday qilib SMSni kiruvchi SMSlar ro`yxatiga qo`shib qoydik, endi agar SMS o`qilmagan den belgilamoqchi bo`sak ya`ni checkbox belgilanmagan turgan bo`lsa notification yaratishimiz. Buni yaratish haqida mana bu yerdan o`qib olishimiz mumkin.
Notificationga tanlanganda SMS menedjerni ochish uchun quyidagicha Intent hosil qilamiz
Men notification uchun ikonka sifatida android.R.drawable.ic_dialog_email ni ishlatdim ammo buni android versiyasi, telefondagi dasturga qarab o`zgartirish imkoniyatlari bo`lsa yanada ishonarli bo`ladi.
Darvoqe SMSlarni o`qish va yozish uchun quyidagi permissionlarni Manifest faylga qo`shib qo`yish kerak bo`ladi:
Shu permissionlarni qo`shib dasturni ishlatib ko`rganimda Samsung kompaniyasining telefonlarida notification berishda vibratsiyaga ham ruxsat olinishi kerakligini bildirdi. Bu kamchilikni to`ldirish uchun quyidagi permissionni ham qo`shib qo`yish kerak bo`ldi
Agar addressga telefon kontaktidan raqamlarni tanlash imkoniyatini qo`shmoqchi bo`lsangiz kontaktlarni o`qish uchun ruxsat olishni ham unutmang:
Asosiy ish prinsipi shunlardan iborat. Dasturni rivojlantirish doirasida qiziqishga ko`ra soxta dialog hosil qilgich, ma`lum vaqtdan keyin xabarni kelishini servicelar bilan tashkillashtirish, SMSga qo`shimcha boshqa ma`lumotlarni yozish imkoniyatlarini qo`shish mumkin. Endi buyog`i fantaziyangizga qarab, ammo dasturni davomini yaratsangiz men bilan uni ulashishni unutmang.
Dastur va dastur kodi
Shunday qilib oldimizdagi masala: biror kishining nomidan uning ma`lumotlarini qo`ygan holda undan SMS kelgan deb kiruvchi yangi SMS yaratish.
Androidda SMS ro`yxati
content://sms
sms kontent provayderlarida saqlanadi. content://sms/inbox
katalogida kiruvchi SMSlar va content://sms/sent
dan chiquvchi SMSlar ro`yxatini o`qib olishimiz mumkin. Aynan shu manzillarga biz SMS ma`lumotimizni joylab qo`yamiz va notification yaratsak yangi SMS kelganligini bildirishimiz mumkin. Lekin afsuski qurilmada o`rnatilgan SMS menedjer nomidan notification yarata olmaymiz, o`z applicationimizdan SMS kelganligi haqida notification yaratish bilan cheklanamiz. Men boshqa yo`lini topolmadim, Google Playdagi bir nechta ilovalarda ham xuddi shunday usul qo`llanilgan, agar sizda boshqa taklif bo`lsa iltimos pastda bu haqida fikr bildiring. Ilova interfeysi:
Oddiygina faqat uchta parametri kiritiladi: kimdan, xabar matni va xabarni o`qilgan deb belgilanishi. Kiritilgan ma`lumotlar yuqorida yozganimdek sms content provayderga yuboriladi:
// SMS kontent provayderga yuboriladigan ma`lumotlarni sozlash
ContentValues localContentValues = new ContentValues();
// yuboruvchini biriktirish
localContentValues.put("address", address);
// xabar matnini biriktirish
localContentValues.put("body", body);
// xabar o`qilganligini biriktirish
localContentValues.put("read", read);
Ammo imkoniyatlarni kengaytirib unga _id, thread_id, person, date, protocol, read, status, type, reply_path_present, subject, service_center, locked ma`lumotlarini ham yozishimiz mumkin. Barcha parametrlarni buyerdan topishingiz mumkin.
Shunday qilib SMSni kiruvchi SMSlar ro`yxatiga qo`shib qoydik, endi agar SMS o`qilmagan den belgilamoqchi bo`sak ya`ni checkbox belgilanmagan turgan bo`lsa notification yaratishimiz. Buni yaratish haqida mana bu yerdan o`qib olishimiz mumkin.
if (read == 0) {
// Notification NotificationCompat.Builder dan foydalanamiz, klassik
// metodlarning ba`zi qismlari deprecated metodlar safiga kiradi
NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this);
// Notification uchun kerakli ma`lumotlarni kiritamiz
// ikonka, TitleText, ContentText
mBuilder.setSmallIcon(android.R.drawable.ic_dialog_email);
mBuilder.setContentTitle(address).setContentText(body);
// bildirish turi va bosilgada o`chish
mBuilder.setDefaults(Notification.DEFAULT_ALL).setAutoCancel(true);
// notification tanlanganda qayerga nimani ochishni belgilash
Intent sendIntent = new Intent(Intent.ACTION_MAIN);
sendIntent.setType("vnd.android-dir/mms-sms");
// PendingIntent yaratib olamiz backStackni to`gri yo`lga qo`yish
// uchun qaysi Activitydan kelayotgani haqida informatsiya saqlash
// mumkin
TaskStackBuilder stackBuilder = TaskStackBuilder.create(this);
// ParentIntentni kiritish shartmas, keyingi Activityni kiritamiz
stackBuilder.addNextIntent(sendIntent);
PendingIntent resultPendingIntent = stackBuilder.getPendingIntent(
0, PendingIntent.FLAG_UPDATE_CURRENT);
// PendingIntent ni biriktiramiz
mBuilder.setContentIntent(resultPendingIntent);
NotificationManager mNotificationManager =
(NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
// ishga tushiramiz
mNotificationManager.notify(0, mBuilder.build());
}
Notificationga tanlanganda SMS menedjerni ochish uchun quyidagicha Intent hosil qilamiz
// notification tanlanganda qayerga nimani ochishni belgilash
Intent sendIntent = new Intent(Intent.ACTION_MAIN);
sendIntent.setType("vnd.android-dir/mms-sms");
Men notification uchun ikonka sifatida android.R.drawable.ic_dialog_email ni ishlatdim ammo buni android versiyasi, telefondagi dasturga qarab o`zgartirish imkoniyatlari bo`lsa yanada ishonarli bo`ladi.
Darvoqe SMSlarni o`qish va yozish uchun quyidagi permissionlarni Manifest faylga qo`shib qo`yish kerak bo`ladi:
<uses-permission android:name="android.permission.READ_SMS" />
<uses-permission android:name="android.permission.WRITE_SMS" />
Shu permissionlarni qo`shib dasturni ishlatib ko`rganimda Samsung kompaniyasining telefonlarida notification berishda vibratsiyaga ham ruxsat olinishi kerakligini bildirdi. Bu kamchilikni to`ldirish uchun quyidagi permissionni ham qo`shib qo`yish kerak bo`ldi
<uses-permission android:name="android.permission.VIBRATE" />
Agar addressga telefon kontaktidan raqamlarni tanlash imkoniyatini qo`shmoqchi bo`lsangiz kontaktlarni o`qish uchun ruxsat olishni ham unutmang:
<uses-permission android:name="android.permission.READ_CONTACTS" />
Asosiy ish prinsipi shunlardan iborat. Dasturni rivojlantirish doirasida qiziqishga ko`ra soxta dialog hosil qilgich, ma`lum vaqtdan keyin xabarni kelishini servicelar bilan tashkillashtirish, SMSga qo`shimcha boshqa ma`lumotlarni yozish imkoniyatlarini qo`shish mumkin. Endi buyog`i fantaziyangizga qarab, ammo dasturni davomini yaratsangiz men bilan uni ulashishni unutmang.
Dastur va dastur kodi
2 комментария