View Full Version : چطوری اس ام اس های مختص برنامه رو فقط داخل برنامه مرود نظر نشون داد
mohsen.hex
پنج شنبه 01 فروردین 1392, 23:02 عصر
سلام
من یه نرم افزار نوشتم که قرار هست یک سری اس ام اس های افراد خاص رو توی اینباکس خودش بزاره واصلا در این باکس گوشی اصلا نشون نده.
سوال 1 : ایا باید اس ام اس دریافتی مشخصات خاصی داشته باشد؟ مثلا چخ مشخصاتی؟؟
2 : ...؟؟
MMSHFE
جمعه 02 فروردین 1392, 10:45 صبح
وقتی SMS توسط یک سیستم آندروید دریافت میشه، توی یک Intent مرتب شده براساس اولویت از گیرندگان که اکشن android.provider.Telephony.SMS_RECEIVED رو دارن، توزیع میشه. همه گیرندگان ثبت شده، به ترتیب اولویتی که توی intent-filter مشخص کردن، این Intent رو دریافت میکنن. البته ترتیب دریافت SMS توی گیرندگانی که اولویت یکسان دارن مشخص نیست. بهرحال هر BroadcastReceiver میتونه جلوی رسیدن SMS به بقیه گیرندگان توی صف رو با صدا زدن ()abortBroadcast بگیره. برای مثال، به کد زیر دقت کنید:
public class SmsFilter extends BroadcastReceiver {
@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();
String sender = null;
for (int i = 0; i < pdus.length; i++) {
SmsMessage message = SmsMessage.createFromPdu((byte[]) pdus[i]);
if (sender == null) sender = message.getOriginatingAddress();
String text = message.getMessageBody();
if (text != null) sb.append(text);
}
if (sender != null && sender.equals("999999999")) {
// Process our sms...
abortBroadcast();
}
return;
}
}
// ...
}
}
بنظر میرسه که گیرنده پیشفرض آندروید از اولویت صفر استفاده میکنه. پس شما میتونید با اولویت یک، برنامه خودتون رو بالاتر از اون توی صف گیرندگان بگذارین:
<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" />ضمناً فهرست همه گیرندگان رو هم همراه با اولویتشون میتونید با این روش بدست بیارین:
Intent smsRecvIntent = new Intent("android.provider.Telephony.SMS_RECEIVED");
List<ResolveInfo> infos = context.getPackageManager().queryBroadcastReceiver s(smsRecvIntent, 0);
for (ResolveInfo info : infos) {
System.out.println("Receiver: " + info.activityInfo.name + ", priority=" + info.priority);
}
شرمنده که کدها رو توی تگ HTML گذاشتم چون ادیتور سایت برنامه نویس خوب نشون نمیده.
امیدوارم توضیحاتی که دادم به دردتون بخوره.
منبع (http://stackoverflow.com/questions/9175969/how-to-prevent-sms-going-to-inbox-in-android)
mohsen.hex
سه شنبه 02 دی 1393, 21:36 عصر
سلام
چطوری میتونم وقتی بک پیام جدید امد و شماره مورد نظر بود یک دیالوگ یا یک چیز دیگه باز بشه و پیام را نمایش بده؟؟
خودم اومدم از دیالوگ استفاده کنم و لی متاسفانه برای تعریف به مشکل بر خوردم به این شکل که موقع
Dialog dialog = new Dialog(MainActivity.this);
نمیدونم جای MainActivity.this چی بنویسم!!
mohsen.hex
پنج شنبه 04 دی 1393, 14:58 عصر
:گریه::گریه::گریه::گریه::گریه: :گریه::گریه::گریه:
mohsen.hex
یک شنبه 07 دی 1393, 21:53 عصر
:عصبانی++::عصبانی++::عصبانی++:: صبانی++::عصبانی++::عصبانی++::ع بانی++::عصبانی++:
saeed_g21
یک شنبه 07 دی 1393, 22:00 عصر
سلام
چطوری میتونم وقتی بک پیام جدید امد و شماره مورد نظر بود یک دیالوگ یا یک چیز دیگه باز بشه و پیام را نمایش بده؟؟
خودم اومدم از دیالوگ استفاده کنم و لی متاسفانه برای تعریف به مشکل بر خوردم به این شکل که موقع
Dialog dialog = new Dialog(MainActivity.this);
نمیدونم جای MainActivity.this چی بنویسم!!
به جای MainActivity اسم فایل جاوا رو بشرطی که با اکتیویتی Extend شده باشه
این کد رو کجا استفاده میکنی ؟
سورس کامل فایل جاواش رو بده
ali_khodayar
دوشنبه 08 دی 1393, 08:55 صبح
با تشکر از جواب مدیر بخش.
کدی که شما قرار دادید درست کار میکنه فقط یه مشکلی که داره اینه که توی Inbox هم نمایش میده. من هم دنبال کدی هستم که وقتی اس ام اس از ارسال کننده ارسال میشه در دستگاه گیرنده اصلأ مشخص نباشه که اس ام اسی دریافت شده.
dalmif
دوشنبه 08 دی 1393, 09:11 صبح
خیلی موضوع جالبی به نظر میرسه.
من هم به دنبال این کد هستم.:لبخند:
dalmif
دوشنبه 08 دی 1393, 09:43 صبح
آقا این کد کاملا سالم هست.
خیلی هم ممنون از دوست عزیز
MMSHFE (http://barnamenevis.org/member.php?55504-MMSHFE)
+ تشکر
ali_khodayar
دوشنبه 08 دی 1393, 09:52 صبح
آقا این کد کاملا سالم هست.
خیلی هم ممنون از دوست عزیز
MMSHFE (http://barnamenevis.org/member.php?55504-MMSHFE)
+ تشکر
دوست عزیز من این کد رو که تست کردم اس ام اس ارسالی در Inbox نمایش داده میشه.
امکانش هست برنامتون رو بزارید ؟؟
با تشکر
ali_khodayar
دوشنبه 08 دی 1393, 13:09 عصر
درست شد درست شد :لبخندساده:
با تشکر از
MMSHFE (http://barnamenevis.org/member.php?55504-MMSHFE)
mohsen.hex
دوشنبه 08 دی 1393, 22:08 عصر
درست شد درست شد :لبخندساده:
با تشکر از
MMSHFE (http://barnamenevis.org/member.php?55504-MMSHFE)
چطورش بود؟؟
mohsen.hex
دوشنبه 08 دی 1393, 22:16 عصر
به جای MainActivity اسم فایل جاوا رو بشرطی که با اکتیویتی Extend شده باشه
این کد رو کجا استفاده میکنی ؟
سورس کامل فایل جاواش رو بده
من میخام وقتی پیام جدید امد به شکل بک صفحه که گوشی در هر حالتی(منو اصلی یا بازی یا برنامه دیگر) بود نمایش داده بشه حالا از کجا بدونم پیام جدید اومده باید از برنامه بالا که از کلاس BroadcastReceiver extanded شده استفاده کنم و در نتیجه باید این دستورت رو داخل این کلاس بنویسم تا اجرا بشوند حالا وقتی که مینویسم میگه در داخل BroadcastReceiver پشتیبانی نمیشود امدم داخل mainactivity زیربرنامه تعریف کردم که هر زمان خواستم فراخوانی کنم و نمایش که متاسفانه زیر برنامه باید از نوع static باشد و اینجاست که به بم بست خوردم!!
اشکال کارم هم فکر میکنم اینجاست باید داخل mainactivity اینها ر بنویسم و اجرا کنم که نمیدونم چطوری بنویسم تا هممخوانی داشته باشد!؟؟
یا راه دیگیری هست؟؟
mohsen.hex
سه شنبه 09 دی 1393, 06:59 صبح
اقا این هم کد
http://vip.eca.ir/sharing/uploads/14199124621.rar
ali_khodayar
سه شنبه 09 دی 1393, 11:09 صبح
چطورش بود؟؟
مشکل من توی شماره بود . من اشتباهی شماره رو به صورت --------0912 , وارد میکردم که باید با 98+ شروع میکردم. :لبخندساده:
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.