PDA

View Full Version : Listener هنگام دریافت اسمس



arfaie
سه شنبه 07 دی 1395, 20:36 عصر
باسلام و خسته نباشید
من میخواستم وقتی یه اسمس میاد ، باتوجه به متن اسمس یه متد خاصی اجرا بشه!
از interface استفاده میکنم همیشه و جواب میده!
ولی اینبار اصلا به متدی که نوشتم نمیره و میگه smsListener نال هست!


:BroadcastReciver.java




public class IncomingSms extends BroadcastReceiver {
String smsBody;

private SmsListener smsListener;

public interface SmsListener {
void PassActivate();
};

public void setSmsListener(SmsListener listener) {
smsListener = listener;
}

public static final String SMS_BUNDLE = "pdus";
@Override
public void onReceive(Context context, Intent intent) {

String address = "";
Bundle intentExtras = intent.getExtras();
if (intentExtras != null) {
Object[] sms = (Object[]) intentExtras.get(SMS_BUNDLE);
String smsMessageStr = "";
for (int i = 0; i < sms.length; ++i) {
SmsMessage smsMessage = SmsMessage.createFromPdu((byte[]) sms[i]);

smsBody = smsMessage.getMessageBody().toString();
address = smsMessage.getOriginatingAddress();
}

String strOrig = smsBody;

try {
if (strOrig.contains("_Activated_")) {
if(smsListener!=null){
smsListener.PassActivate();
}

} else {
Toast.makeText(context, "Ops", Toast.LENGTH_LONG).show();
}

} catch (Exception e) {
Toast.makeText(context, "Ops", Toast.LENGTH_LONG).show();
}

}
}


:Activity

import arfaie.navid.mei.IncomingSms.SmsListener;


public class Activate extends Activity {


private IncomingSms incomingSms;


@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_activate);

incomingSms = new IncomingSms();
incomingSms.setSmsListener(smsListener);


}


SmsListener smsListener = new SmsListener() {
@Override
public void PassActivate() {
Toast.makeText(getBaseContext(), "It Works", Toast.LENGTH_SHORT).show();
}
};


ممنون میشم اگه راهنماییم کنید :)

tux-world
چهارشنبه 08 دی 1395, 08:33 صبح
خوب؟
مشکل چیه؟
خطا چیه؟ :متفکر:

arfaie
چهارشنبه 08 دی 1395, 09:04 صبح
خوب؟
مشکل چیه؟
خطا چیه؟ :متفکر:ممنون از اینکه پاسخ دادین!
من وقتی دیباگ میکنم و بریک پوینت میذارم،وقتی میرسه به خط زیر:

if(smsListener!=null){

smsListener.PassActivate();

}همیشه نال هست مقدار smsListener
در حالی که من همین حالت رو توی کلاسهای دیگه استفاده میکنم و مشکلی نیس
ولی توی broadcast جواب نمیده!

1masoud1
جمعه 10 دی 1395, 00:28 صبح
سلام
میتونی یه تابع در اکتیویتی بنویسی و اون رو در Broadcast فراخوانی کنی :

فراخوانی در Broadcast:

((YourActivity) context).yourMethode(yourValue)

arfaie
جمعه 10 دی 1395, 23:55 عصر
سلام
میتونی یه تابع در اکتیویتی بنویسی و اون رو در Broadcast فراخوانی کنی :

فراخوانی در Broadcast:

((YourActivity) context).yourMethode(yourValue)
خیلی ممنون از اینکه پاسخ دادین.
فقط یه سوال؟
context که پاس میدیم بهش باید از اکتیویتی بگیریم؟
اگه آره،چجوری باید بگیریم؟
ممنون

1masoud1
شنبه 11 دی 1395, 11:54 صبح
خود متد onReceive مقدار context رو داره از همین context استفاده کنید
@Override

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