رفتن به مطلب
  • 0

اجرای برنامه پس از دریافت اس ام اس از یک شماره خاص


hojjatalavi

سوال

سلام .میخواستم یه برنامه بنویسم که در حالتی که صفحه گوشی خاموش هست پس از دریافت اس ام اس از یک شماره خاص ، برنامه رو اجرا کنه .آیا با سرویس pnbroadcastreciever میشه این کار رو کرد؟

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

11 پاسخ به این سوال تاکنون داده شده است

ارسال‌های توصیه شده

در 22 دقیقه قبل، hojjatalavi گفته است :

جناب ایزدی ممنونم

smsinterceptor زمانی که برنامه در حال اجرا باشه باهاش میشه پیامهای دریافت شده رو خوند.اما من میخوام با دریافت پیامک برنامه ام اجرا بشه.

باز هم ممنون از راهنماییتون 

سلام.

شما باید از برادکست رسیور استاتیک استفاده کنید. کتابخانه هایی نظیر PNbroadCast و SMSIn.... فقط توی سرویس کار میکنن.

کل کارایی که باید انجام بشه برای یه برادکست رسیور دریافت پیامک:

 باید تو منیفست این برادکست رو رجیستر کنید:

AddReceiverText(receiver,<intent-filter>
 <action android:name="android.provider.Telephony.SMS_RECEIVED"></action>
  </intent-filter>)

 یه سرویس ایجاد بکنید که به محض دریافت پیامک اجرا بشه و اینتنت مورد نظر رو استخراج کنه، مثلا من اسم سرویس رو گذاشتم receiver و تو کد بالا هم اسمشو دادم.

بعدش بیاید با استخراج اینتنت به وسیله Bundle که این هم از InLineJava استفاده بشه.(چون تو بیسیک نداریم) ، شماره و متن رو بگیرید و شرط های لازم رو بذارید:

Sub Service_Start (StartingIntent As Intent)

	Dim j As JavaObject
	j.InitializeContext
	
	Log("شماره: "&j.RunMethod("GET",Array As Object("number",StartingIntent)))
	Log("متن: "&j.RunMethod("GET",Array As Object("body",StartingIntent)))
End Sub


#if java
import android.os.Bundle;
import android.content.Intent;
import android.telephony.SmsMessage;

    public String GET(String extra,Intent intent){
    	final Bundle bundle = intent.getExtras();
        try {
            if (bundle != null) {
                final Object[] pdusObj = (Object[]) bundle.get("pdus");
                for (int i = 0; i < pdusObj.length; i++) {
                    SmsMessage currentMessage = SmsMessage.createFromPdu((byte[]) pdusObj[i]);
                    String phoneNumber = currentMessage.getDisplayOriginatingAddress();
                    String senderNum = phoneNumber;
                    String message = currentMessage.getDisplayMessageBody();
                    
                    extra=extra.toLowerCase();
                    if(extra.contains("body"))
                    {return message;}
                    else if(extra.contains("number"))
                    {return senderNum;} //pejman nikravan
                   
                } 
              }
        } catch (Exception e) {
           //  
        }
        return "";
    }
#end if

 

حالا اینا یه تکه هایی از روند کارش بود. من قبلا یه سورس دقیقا برای همینکار برای کسی آماده کردم بودم که اینجا میذارمش استفاده کنید.

دریافت اس ام اس با برادکست استاتیک

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

درود و خوش آمد بهتون میگم

با pnbroadcastReceiver شخصا کار نکردم و خود استاد نیکروان و صدا میکنم تا بیاد بهتون در موردش توضیح بیشتری بده

اما چیزی که میخواهید با این روش میشه :

 

 

کلا  عبارت SmsInterceptor رو  توی انجمن جست و جو کنید هر تاپیگی که بالا بیاره به کار شما مربوط میشه :53:

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

جناب ایزدی ممنونم

smsinterceptor زمانی که برنامه در حال اجرا باشه باهاش میشه پیامهای دریافت شده رو خوند.اما من میخوام با دریافت پیامک برنامه ام اجرا بشه.

باز هم ممنون از راهنماییتون 

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

من نمیتونستم با این دکمه پسند خودمو راضی کنم

ممنون ممنون

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

با سلام خدمت شما جناب نیکروان

خیلی ممنونم که منو راهنمایی میفرمایید .

دو تا سوال دارم .

1. آیا با این کار اگه برنامه اجرا نشده باشه میتوان اجراش کرد؟

2.چطور از این برنامه تو main استفاده کنم.

ببخشید اگه سوالها در سطح پایین و پیش پا افتاده است.

ممنون از وقتی که میذارید

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

در ۱ ساعت قبل، hojjatalavi گفته است :

1. آیا با این کار اگه برنامه اجرا نشده باشه میتوان اجراش کرد؟

سلام. خیر باید حتما برنامه یکبار اجرا بشه تا برادکست در منیفست رجیستر بشه.

 

در ۱ ساعت قبل، hojjatalavi گفته است :

2.چطور از این برنامه تو main استفاده کنم.

منظورتون رو متوجه نشدم.

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

از برنامه recieve که زحمت کشیدید ارسال کردین تو برنامه اصلی خودم استفاده کنم.

پارامترهایی که در اختیار من میذاره کدوم هستش؟

من برنامه رو توی برنامه خودم اضافه کردم اما ارتباط بین این برنامه و برنامه خودم از طریق کدوم پارامترها باید انجام بشه.

ممنون

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

مهندس این کد شماست

Log("شماره: "&j.RunMethod("GET",Array As Object("number",StartingIntent)))
	Log("متن: "&j.RunMethod("GET",Array As Object("body",StartingIntent)))

 

من میخوام تو گوشی این کد با msgbox اجرا کنم چطور کدنویسی کنم

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

در 20 دقیقه قبل، hojjatalavi گفته است :

من برنامه رو توی برنامه خودم اضافه کردم اما ارتباط بین این برنامه و برنامه خودم از طریق کدوم پارامترها باید انجام بشه.

منظورتون سرویس Receiver هست؟:Laie_53:

# ببینید اینا دیگه مربوط میشه به دانش و تجربه خودتون، چیزای ساده ای هست که با یه سرچ پیدا میشه. اینطوری الکی تاپیک پر از پاسخ میشه.

شما گفتید با دریافت اس ام اس اکتیویتی main تون اجرا بشه، منم اومدم یه لاگ گذاشتم که شماره و پیام دریافت شده رو نشون بده. خب همینجا مینویسید StartActivity(main) تا اکتیویتی main رو اجرا کنه دیگه:hi:

اگه منظورتون اینه که چطور شماره و پیام دریافت شده رو انتقال بدید به اکتیویتی main و اونجا نمایشش بدید، میتونید دوتا متغیر توی procces_Gloubals اکتیویتی تعریف کنید:

Sub Process_Globals
	Dim shomare,payam As String
End Sub

و توی سرویس receiver هم شماره و پیامو مساوی این دوتا متغیر قرار بدید و اکتیویتی رو استارت کنید:

Sub Service_Start (StartingIntent As Intent)

	Dim j As JavaObject
	j.InitializeContext
	
	Main.shomare=j.RunMethod("GET",Array As Object("number",StartingIntent))
	Main.payam=j.RunMethod("GET",Array As Object("body",StartingIntent))
	StartActivity(Main)
End Sub

 

 

 

در 26 دقیقه قبل، mojtaba68 گفته است :

من میخوام تو گوشی این کد با msgbox اجرا کنم چطور کدنویسی کنم

برای شما همینطور، اینطور چیزها خیلی زیاد بحث شده و تکراری هست. توی سرویس نمیتونید مسیج باکس نمایش بدید، باید ToastMessage استفاده کنید، یا یه اکتیویتی رو استارت کنید و اونجا نمایش بدید.

و یا مسیج باکس سفارشی بسازید که بازهم سرچ کنید برای نمونه: مسیج باکس در سرویس  اینطور چیزها پیدا میشه.

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

مهندس شما با کتابخانه PNBroadcastReceiver میشه یک سرویس پنهان درست کرد که وقتی از یک شماره خاص محدود کنیم مثلا

اگر این شماره اس ام اس اومد 0937******40  متن و شماره تلفن بگیره و نرم افزار که تو اون اکتیویتی که سرویس ماژولی که  استارت کرده بودیم اونجا بیام متن و شماره نمایش بدیم .....

 

یک مورد دیگه اینکه این فیلم اموزش ویدیویی که تدوین کردید که خیلی عالی بود منو با این قابلیت کتابخانه روشن کردی ممنون

حال برای دریافت اس ام اس میشه استفاده کرد امکان داره منو راهنمایی کنید

android.intent.action.DATA_SMS_RECEIVEDدریافت
android.provider.Telephony.SMS_CB_RECEIVEDدریافت 
android.provider.Telephony.SMS_DELIVERارسال
android.provider.Telephony.SMS_EMERGENCY_CB_RECEIVEDاظطراری
android.provider.Telephony.SMS_RECEIVED دریافت
android.provider.Telephony.SMS_REJECTED
android.provider.Telephony.SMS_SERVICE_CATEGORY_PROGRAM_DATA_RECEIVED

 

 

مهندس میخوان من یک تایپیک جدید از این PNBroadcastReceiver  کتابخانه بزنم اونجا مبحث سرویس پنهان این کتابخانه در مورد با sms  دریافت و ارسال صحبت کنیم

 

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

در 40 دقیقه قبل، mojtaba68 گفته است :

اگر این شماره اس ام اس اومد 0937******40  متن و شماره تلفن بگیره و نرم افزار که تو اون اکتیویتی که سرویس ماژولی که  استارت کرده بودیم اونجا بیام متن و شماره نمایش بدیم .....

عزیز دل برادر نیازی نیست از PNBroadcast استفاده کنید و نمیدونم مخفی سازی سرویس و...

این سورس و روش بالا اصلا نیازی به اجرا موندن یه سرویس نداره. و همون کاری هم که میخواین قابل انجامه.

من تعجب میکنم، شماره ها نمایش داده شدن، کافیه یه شرط بذارید و کارتون رو انجام بدید دیگه.

تاپیک اصلی پاسخ داده شد، باقی سوالات با سرچ و یا ایجاد تاپیک جدید حل میشه.

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

بایگانی شده

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

  • کاربران آنلاین در این صفحه   0 کاربر

    • هیچ کاربر عضوی،در حال مشاهده این صفحه نیست.
×
×
  • اضافه کردن...