دریافت پیامک در اندروید

0 امتیاز
36 بازدید
سوال شده مهر 16, 1394 توسط jaykob  
برچسب گذاری دوباره مهر 16, 1394 توسط ASHKARAN
سلام خدمت استاد آشکاران

 

من داخل یک سوال دیگه نحوه ارسال پیامک رو متوجه شدم اما توی این سوال می خوام نحوه دریافت پیامک رو بدونم که به گوشی ما یک پیامک که می آد چطور اونو بگیریم و متن رو بخونیم مثلا اگر عدد ۱ بود یک کاری کنیم یا ... ممنون می شم در این زمینه راهنمایی کنید

یک موضوع دیگه هم می خوام بدونم می شه کاری کرد پیامک های دریافتی توی صندوق دریافت پیامک ها نره ؟ یعنی پیامک رو گوشی بگیره متن رو بخونیم کاری رو انجام بدیم بعد پاکش کنیم ؟ ممنون می شم کد و راهنمایی این موضوع رو هم بهم بگید

 

با تشکر فراوان
این مطلب را به اشتراک بگذارید

1 پاسخ

+1 امتیاز
پاسخ داده شده مهر 16, 1394 توسط ASHKARAN  
انتخاب شده مهر 16, 1394 توسط jaykob
 
بهترین پاسخ

با عرض سلام

در ابتدا یک پروژه جدید ایجاد بفرمایید.

در فایل Manifest خود دسترسی زیر را اضافه کنید.

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

سپس در تگ Application  یک Receiver ایجاد کنید ....

<receiver
        android:name="SMSReceiver"
        android:permission="android.permission.BROADCAST_SMS" >
         <intent-filter>
           <action android:name="android.provider.Telephony.SMS_DELIVER" />
           <action android:name="android.provider.Telephony.SMS_RECEIVED" />
         </intent-filter>
</receiver>

 که در کد بالا  SMSReceiver باید مطابق با کلاسی باشه که در ادامه میسازیم....

یک کلاس ایجاد بفرمایید با اسم SMSReceiver و کد زیر رو بهش اضافه کنید:

public class SMSReceiver extends BroadcastReceiver {

 
    private static final String ACTION_SMS_RECEIVED = "android.provider.Telephony.SMS_RECEIVED";
      
	@Override
	public void onReceive(Context context, Intent intent) {

		//sms ke biad in tabe farakhooni mishe
		
	}
	 
}

زمانی که شما از کلاس BroadcastReceiver ارث بری می کنید بر اساس اطلاعاتی که در فایل Manifest تعیین کردید سیستم عامل اطلاعات مربوط به شما رو بهتون ارسال میکنه و در تابع OnReceive  بهش دسترسی دارید....

نکته: کافیه تو فایل Manifest  یک Action  برای دریافت وضعیت اینترنت به همراه دسترسی مورد نیاز اضافه کنید و زمانی که گوشی کاربر به شبکه وای فای وصل بشه سیستم عامل از طریق همین کلاسی که ساختید به شما اطلاع میده و تابع OnReceive براتون فراخوانی میشه.....

حالا کافیه در تابع OnReceive اطلاعات رو دریافت کرده و پالایش کنیم.....

String action = intent.getAction();

 if(action.equals(ACTION_SMS_RECEIVED))
         {
        	  
		String address = "";
		String str = "";
		 

        SmsMessage[] msgs = getMessagesFromIntent(intent);
        if (msgs != null) {
            for (int i = 0; i < msgs.length; i++) {
                address = msgs[i].getOriginatingAddress();
                str += msgs[i].getMessageBody().toString();
                str += "\n";
            }
        }   

    
	     // address hamun shumare telephonie ke sms ersal karde
	     // str     matne smsie ke ersal shude
          
         }

 

یعنی در نهایت کلاس شما به این شکل در میاد:

public class SMSReceiver extends BroadcastReceiver {
 
    private static final String ACTION_SMS_RECEIVED = "android.provider.Telephony.SMS_RECEIVED";
    
	@Override
	public void onReceive(Context context, Intent intent) {
 	 
String action = intent.getAction();

 if(action.equals(ACTION_SMS_RECEIVED))
         {
        	  
		String address = "";
		String str = "";
		 

        SmsMessage[] msgs = getMessagesFromIntent(intent);
        if (msgs != null) {
            for (int i = 0; i < msgs.length; i++) {
                address = msgs[i].getOriginatingAddress();
                str += msgs[i].getMessageBody().toString();
                str += "\n";
            }
        }   

    
	     // address hamun shumare telephonie ke sms ersal karde
	     // str     matne smsie ke ersal shude
          
         }

          
		
	}
	 
}

 

برای اینکه مانع از این بشید که پیامک وارد صندوق پیام بشه  شما هیچ راهی ندارید و کاری از دستتون بر نمیاد مگر اینکه نرم افزارشما تبدیل به نرم افزار پیش فرض SMS  بشه .....

به این ترتیب همه پیامک ها میاد به نرم افزار شما و با استفاده از 

android.provider.Telephony.SMS_DELIVER

که اضافه کرده بودیم می تونیم BroadCast مربوز به پیامک رو دریافت کرده جلوی ادامه کارش رو بگیریم و اجازه ندیم نرم افزار های دیگه پیامک رو دریافت کنن.

تفاوت آیتم های زیر در همینه....

android.provider.Telephony.SMS_DELIVER

این BroadCast فقط و فقط به نرم افزار پیش فرض پیامک ارسال میشه.... و هیچ نرم افزار دیگه ای نمیتونه اون رو دریافت کنه !

نکته: SMS_DELIVER قبل از SMS_RECEIVED فراخوانی میشه !

android.provider.Telephony.SMS_RECEIVED

این آیتم به تمامی نرم افزار هایی که قابلیت دریافت پیامک رو داشته باشن BroadCast  رو ارسال میکنه !

در صورتی که می خواین از اکشن SMS_RECEIVED استفاده کنین حتما و حتما پیامک وارد صندوق دریافت گوشی خواهد شد....

در صورتی که اطلاعات مهمی رو میخواین رد و بدل کنین پیشنهاد می کنم از رمزنگاری استفاده بفرمایید !

یک جستجو دیگر هم انجام بدید.... می تونید پیامک رو بعد از دریافت پاک کنید.....

اما در قسمت Notification  به نمایش در میاد......

موفق باشید

733 سوال

672 پاسخ

1,177 دیدگاه

335 کاربر

متاسفانه نیستم

این مطلب را به اشتراک بگذارید

ali.ashkaran@gmail
ما .....
  • سعی بر پاسخگویی به سوالات دیگران داریم.
  • به سوال و یا نظر دیگران احترام می گذاریم .
  • این وبسایت را به دیگران معرفی می کنیم.
  • همواره صمیمیت و ادب را رعایت می کنیم.
  • به سوالمان برچسب های مرتبط اضافه می کنیم.
  • در حین طرح سوال فرد خاصی را مخاطب قرار نمی دهیم .
...