PDA

View Full Version : اجرای یک اکتیویتی در broadcast receiver



majnoon110
شنبه 15 شهریور 1393, 13:43 عصر
با سلام
دوستان گرامی من میخواستم در broadcast receiver هنگامی که یک پیامک دریافت کردم یک اکتیویتی درون برنامه ام رو اجرا کنم

حالا این کار رو باید از چه طریقی انجام بدم؟

آیا باید چک کنم که برنامه باز یا بسته هست؟

اگر برنامه بسته بود اونوقت چطور باید اکتیویتی رو اجرا کنم؟

ممنون میشم اگر راهنمایی کنید. باتشکر

saeed_g21
شنبه 15 شهریور 1393, 16:39 عصر
برای باز کردن باید اینطوری کار کنی
Intent intent = new Intent(context,Activity.class);
context.startActivity(intent);

majnoon110
شنبه 15 شهریور 1393, 17:04 عصر
این حتی اگر برنامه باز هم نباشه جواب میده؟؟
یا فقط وقتی که برنامه در حال اجرا باشه عمل میکنه؟

saeed_g21
شنبه 15 شهریور 1393, 17:07 عصر
این حتی اگر برنامه باز هم نباشه جواب میده؟؟
یا فقط وقتی که برنامه در حال اجرا باشه عمل میکنه؟

خاصیت broadcast receiver اینه که کافیه یکبار فعال بشن و تا زمانی که کاربر برنامه را بصورت دستی Force Close نکرده باشه یا دستگاه خاموش ، روشن نشه فعال مانده و دستورات را دونه به دونه انجام خواهد داد

majnoon110
شنبه 15 شهریور 1393, 17:22 عصر
دوست عزیز با دیروز با کمک harani گرامی یک کد نوشتیم که هنگام دریافت پیامک، اون رو در قالب Toast نمایش بده. و به خوبی کار کرد
اما هنگامی که از این کد شما استفاده میکنم اتفاقی نمیفته و انتقال به اکتیویتی رخ نمیده!
امکانش هست راهنمایی کنید؟


public class IncomingSms extends BroadcastReceiver {

final SmsManager sms = SmsManager.getDefault();

public void onReceive(Context context, 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 message = currentMessage.getDisplayMessageBody();
int duration = Toast.LENGTH_LONG;
Toast toast = Toast.makeText(context,
"senderNum: "+ phoneNumber + ", message: " + message, duration);
toast.show();

Intent inten = new Intent(context,Natije.class);
context.startActivity(inten);
}
}

} catch (Exception e) {
Log.e("SmsReceiver", "Exception smsReceiver" +e);
}

}

saeed_g21
شنبه 15 شهریور 1393, 17:36 عصر
دستور Intent رو خارج از حلقه for بنویس تست بزن

harani
شنبه 15 شهریور 1393, 17:39 عصر
حلقه ی for نیازی نبود این را تست کن :


Object[] pdus = (Object[]) intent.getExtras().get("pdus");
SmsMessage sms = SmsMessage.createFromPdu((byte[]) pdus[0]);
String senderTel = sms.getOriginatingAddress();
String messageBody = sms.getMessageBody();

Intent golaAct= new Intent(context, SmsDetailActivity.class);
golaAct.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
golaAct.putExtra("SENDER", senderTel);
golaAct.putExtra("MESSAGE", messageBody);
context.startActivity(golaAct);

majnoon110
شنبه 15 شهریور 1393, 17:58 عصر
ممنونم از هر دوی شما

harani عزیز کدی که لطف کردی کار میکرد کاملا

حالا یک چیزی اگر بخوام همین پیامک دیگه به اینباکس نره و سریع پاک بشه باید چیکار بکنم؟ آیا راهی هست؟

harani
شنبه 15 شهریور 1393, 18:05 عصر
باید از contentprovider استفاده کنی که در واقع این کلاس ابزاری برای دسترسی به دیتابیس دستگاه است :
http://stackoverflow.com/questions/9389740/delete-an-sms-from-inbox

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

majnoon110
شنبه 15 شهریور 1393, 18:13 عصر
ممنونم از شما

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

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