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
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:
Soxta SMS

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.
Soxta SMS

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 комментария

pLaTiNuM
Fake Call dasturiga oxshash ekan!
0