ورود

View Full Version : عدم ذخیره sms در inbox



sara_orkide
چهارشنبه 21 خرداد 1393, 08:57 صبح
سلام دوستانچه طوری میشه یه برنامه بنویسیم که وقتی از یه شماره خاصی sms رو دریافت کردیم اون sms در inbox ذخیره نشه مثلا در یه فایل text ذخیره شه .. یعنی میخوام کاربر متوجه دریافت sms از یه شماره مشخص نشه ولی تو برنامه از متن اون sms بشه استفاده کرد

miladu
چهارشنبه 21 خرداد 1393, 09:35 صبح
برای این کار باید اس ام اس از جای که ارسال میشه با یک پورت خاص فرستاده بشه بعد داخل برنامه همیشه ورودی اون پرتو چک میکنی و اگر چیزی اومد به کاربر نشون نمیده و میتونی ازش استفاده کنی
دقیقا نرم افزار بانک ها هم از همین روش استفاده میکنن که پیاماشون داخل اینباکس ذخیره نمیشه :)


برای یک شماره خاص هم میتونی هر اس ام اسی که میاد و قبل از این که بره تو اینباکس چک کنی و شمارشو ببینی اما وقتی که برنامه مدیریت اس ام اس نصب باشه روی گوشی کاربر (مثل گو اس ام اس) دیگه اول اون نشون میده و نمیتونی کاری بکنی
دلیلشم اینه که یک مشخصه داریم زمان گرفتن اس ام اس به اسم priority عددی که به این میدیم میزان اهیمت کار مارو تعیین میکنه !! از صفر تا ۹۹۹ !!! اما همه ۹۹۹ میدن تا اول برنامه خودشون اس ام اسو بتونه بخونه برای همین مشکل پیش میاد !!!

فکر میکنم تنها راه همون پورت باشه :)

sara_orkide
سه شنبه 10 تیر 1393, 22:44 عصر
میشه یه نمونه ارسال اس ام اس با پورت برام بزارین

miladu
پنج شنبه 19 تیر 1393, 14:00 عصر
اگر میخواین روی یک پرت خاص اس ام اس دریافت کنید
به فایل Manifest کد زیرو اضافه کنین



<receiver
android:name="ir.test.SmsReceiver">
<intent-filter android:priority="999" >
<action android:name="android.intent.action.DATA_SMS_RECEIVED" />
<data android:scheme="sms" />
<data android:port="1024"/>
</intent-filter>
</receiver>


تو این کد هم Privity رو روی ۹۹۹ گذاشتم هم از پرت ۱۰۲۴ میخونم
فایل
SmsReceiver هم باید یک چیزی شبه کد زیر باشه



public class SmsReceiver extends BroadcastReceiver {
String body = "";
public SmsReceiver() {
}
@Override
public void onReceive(Context context, Intent intent) {


Bundle bundle = intent.getExtras();
if(bundle == null ) {
return;
}
if(!bundle.containsKey("pdus")) {
return;
}
Object[] pdus = (Object[]) bundle.get("pdus");
SmsMessage msgs = SmsMessage.createFromPdu((byte[])pdus[0]);
body = msgs.getMessageBody();
final SmsMessage[] messages = new SmsMessage[pdus.length];
for (int i = 1; i < pdus.length; i++) {
SmsMessage part = SmsMessage.createFromPdu((byte[])pdus[i]);
messages[i] = SmsMessage.createFromPdu((byte[]) pdus[i]);
body += messages[i].getMessageBody();
}
}
}
}


با این کد هر پیامی که روی پرت ۱۰۲۴ بیاد برنامه شما اولین برنامه ای که میخونش
موفق باشید

farhad_koohnakan
شنبه 11 مرداد 1393, 19:36 عصر
اگر میخواین روی یک پرت خاص اس ام اس دریافت کنید
به فایل Manifest کد زیرو اضافه کنین



<receiver
android:name="ir.test.SmsReceiver">
<intent-filter android:priority="999" >
<action android:name="android.intent.action.DATA_SMS_RECEIVED" />
<data android:scheme="sms" />
<data android:port="1024"/>
</intent-filter>
</receiver>


تو این کد هم Privity رو روی ۹۹۹ گذاشتم هم از پرت ۱۰۲۴ میخونم
فایل
SmsReceiver
هم باید یک چیزی شبه کد زیر باشه



public class SmsReceiver extends BroadcastReceiver {
String body = "";
public SmsReceiver() {
}
@Override
public void onReceive(Context context, Intent intent) {


Bundle bundle = intent.getExtras();
if(bundle == null ) {
return;
}
if(!bundle.containsKey("pdus")) {
return;
}
Object[] pdus = (Object[]) bundle.get("pdus");
SmsMessage msgs = SmsMessage.createFromPdu((byte[])pdus[0]);
body = msgs.getMessageBody();
final SmsMessage[] messages = new SmsMessage[pdus.length];
for (int i = 1; i < pdus.length; i++) {
SmsMessage part = SmsMessage.createFromPdu((byte[])pdus[i]);
messages[i] = SmsMessage.createFromPdu((byte[]) pdus[i]);
body += messages[i].getMessageBody();
}
}
}
}


با این کد هر پیامی که روی پرت ۱۰۲۴ بیاد برنامه شما اولین برنامه ای که میخونش
موفق باشید



با سلام ! مطلب مفیدی بود .
لطفا در مورد نحوه ارسال sms از یه پورت خاص هم یک نمونه بگذارید .
و یه سوال ! لیست پورتهای اندروید ( بخصوص پورتهایی که کمتر استفاده میشن ) رو از کجا می تونم بگیرم ؟

alimooghashang
جمعه 02 مرداد 1394, 16:34 عصر
برای اینکار باید از pdu استفاده کرد