ورود

View Full Version : آموزش: گرفتن پیام ورودی و استفاده از آن در برنامه خود



dalmif
یک شنبه 06 اردیبهشت 1394, 16:02 عصر
با سلام.
امروز تصمیم گرفتم تا این آموزش بسیار ساده رو بهتون یاد بدم (البته به دوستان تازه کاری مثل خود بنده) :
تمامی کد ها به صورت کامل در انتهای آموزش قرار دارد.

آموزش: گرفتن پیام ورودی و استفاده از آن در برنامه خود
برای این کار ابتدا کلاسی به نام SmsFilter (این نام دلخواه است) می سازیم.
2. سپس BroadcastReceiver ارث بری میکنیم.


public class SmsFilter extends BroadcastReceiver {

حالا onReceive را Override یا باز نویسی می کنیم برای این کار از کد زیر در کلاس خود استفاده می کنیم:


@Override
public void onReceive(Context context, Intent intent) {
}

در ادامه باید اس ام اس های دریافتی را از گوشی بگیریم برای این کار از کد زیر در onReceive استفاده می کنیم.:



if (intent.getAction().equals("android.provider.Telephony.SMS_RECEIVED")) {
Bundle extras = intent.getExtras();
if (extras != null) {
Object[] pdus = (Object[])extras.get("pdus");


if (pdus.length < 1) return; // Invalid SMS. Not sure that it's possible.


StringBuilder sb = new StringBuilder();

for (int i = 0; i < pdus.length; i++) {
message = SmsMessage.createFromPdu((byte[]) pdus[i]);
if (sender == null) sender = message.getOriginatingAddress();
text = message.getMessageBody();
if (text != null) sb.append(text);



}


if (sender != null) {
Log.i("SMS", sender);
abortBroadcast();
}



return;
}
}

کد ها رو با کمی نگاه متوجه می شید که برای چی استفاده شده. حالا متغییر های زیر را به پروژه خود اضافه می کنید.


private static SmsMessage message = null;
private static String text;
private static String sender = null;

با کد abortBroadcast(); اس ام اس در همین برنامه خاتمه می یابد و به صندوق پیام نمی رود اما اگر این کد را حذف نمایید پس از انجام عملیات بر روی پیام. اس ام اس ارسال شده به صندوق پیام منتقل میشود.
حالا با کد اضافه کردن کد زیر به منیفست کار را تمام کنید.


<receiver android:name=".SmsFilter" >
<intent-filter android:priority="1">
<action android:name="android.provider.Telephony.SMS_RECEIVED" />

</intent-filter>
</receiver>

پرمیشن زیر رو هم اضافه کنید.


<uses-permission android:name="android.permission.RECEIVE_SMS"/>

توجه: هر نرم افزاری در این رابطه یک اولویتی دارد برای مثال صندوق پیام پیشفرض اولویت 0 را دارد و اگر شما با اولویت 1 باشید می توانید شما اول پیام را دریافت و روی آن کار کنید.
توجه: برنامه GoSMS با اولویت فوق العاده بالا امکان رسیدن پیام به نرم افزار شما را نمی دهد لذا شما باید آن را از گوشی خود حذف نمایید و سپس کار کنید.
توجه: اگه کمی و کاستی در این آموزش دیدید به بزرگی خودتون ببخشید این اولین آموزش بنده بود اگه به دردتون خورد از همین پایین گزینه تشکر رو بزن.:لبخند:
کد کامل:




public class SmsFilter extends BroadcastReceiver {


private static SmsMessage message = null;
private static String text;
private static String sender = null;


@Override
public void onReceive(Context context, Intent intent) {

if (intent.getAction().equals("android.provider.Telephony.SMS_RECEIVED")) {
Bundle extras = intent.getExtras();
if (extras != null) {
Object[] pdus = (Object[])extras.get("pdus");


if (pdus.length < 1) return; // Invalid SMS. Not sure that it's possible.


StringBuilder sb = new StringBuilder();

for (int i = 0; i < pdus.length; i++) {
message = SmsMessage.createFromPdu((byte[]) pdus[i]);
if (sender == null) sender = message.getOriginatingAddress();
text = message.getMessageBody();
if (text != null) sb.append(text);



}


if (sender != null) {
Log.i("SMS", sender);
// amaliat ra inja anjam dahid
abortBroadcast();
}



return;
}
}


// ...
}

}

تشکر رو نزدی ها؟؟؟!!:لبخند:

rain27
جمعه 18 اردیبهشت 1394, 20:37 عصر
سلام مرسی از کد مفیدت:لبخند:

یه سوال دارم:
من میخوام وقتی از یه شماره خاص اس ام اس اومد،برنامه من اجرا بشه. چی کار کنم؟

dalmif
جمعه 18 اردیبهشت 1394, 20:47 عصر
سلام
خواهش میکنم.
کد زیر رو تغییر بدید



if (sender != null) {
Log.i("SMS", sender);
// amaliat ra inja anjam dahid
abortBroadcast();
}

یعنی این شکلی کنید:



if (sender != null && sender == "+989386332213") {
Log.i("SMS", sender);
// amaliat ra inja anjam dahid
abortBroadcast();
}


دقت کنید که باید شمارتون اولش +98 باشه و صفر اولش رو نمی خواد.
به این شماره هم که نوشتم زنگ نزنید. شماره خودمه :لبخند:

hosseinaryai
جمعه 18 اردیبهشت 1394, 22:28 عصر
اول اینکه ممنون بابت آموزش خوبت ..
و دوم امشب کلن گوشیتو خاموش کن :لبخند: