PDA

View Full Version : مشکل در دریافت sms در برنامه



gilas1368
پنج شنبه 28 اسفند 1393, 20:02 عصر
سلام به همگی
دوستان من دارم برای ثبتنام برنامه ام از ارسال کد تایید استفاده میکنم و میخوام زمانیکه sms کد تایید میاد اونو توی ی textbox نمایشش بدم
برای دریافت sms از کد زیر دارم استفاده میکنم ک ی broadcastREceiver هستش


public class SMSReceive extends BroadcastReceiver {


@Override
public void onReceive(Context context, Intent intent) {
Bundle bundle=intent.getExtras();
SmsMessage[] msgs=null;


String str="";


if(bundle!=null){
Object[] pdus = (Object[]) bundle.get("pdus");
msgs=new SmsMessage[pdus.length];


for (int i=0;i<msgs.length;i++){
msgs[i] = SmsMessage.createFromPdu((byte[])pdus[i]);
str += msgs[i].getMessageBody().toString();
str += "\n";
}
}


Toast.makeText(context,str,Toast.LENGTH_LONG).show ();


Intent broadcastIntent=new Intent();
broadcastIntent.setAction("SMS_RECEIVED_ACTION");
broadcastIntent.putExtra("Body",str);
abortBroadcast();
}
}

اما زمانیکه sms میاد اون Toast رو نمایش نمیده ک نمیده هیچ کد رو هم نمیتونه توی textboxام نمایش بده

بنظرتون مشکل از کجاست؟

ممنونم میشم کسی اگ چیزی میدونه راهنمائیم کنه

راستی من روی گوشیم دارم تست میکنم با شبیه ساز تست نگرفتم

متشکرم

#root#
پنج شنبه 28 اسفند 1393, 20:19 عصر
برنامه مجوز دریافت و خواندن پیامک دارد؟

gilas1368
پنج شنبه 28 اسفند 1393, 20:23 عصر
برنامه مجوز دریافت و خواندن پیامک دارد؟

بله توی برنامه این دسترسی ها اعمال شده:



<uses-permission android:name="android.permission.SEND_SMS"/>
<uses-permission android:name="android.permission.READ_SMS"/>
<uses-permission android:name="android.permission.RECEIVE_SMS"/>

meysam jahedi
پنج شنبه 28 اسفند 1393, 20:33 عصر
من از دستورات به صورت زیر جواب گرفتم :



public void onReceive(Context context, Intent intent) {


final Bundle bundle = intent.getExtras();

if (intent.getAction().equals(ACTION)) {
//Service
Intent serviceIntent = new Intent(context, Main.class);
context.startService(serviceIntent);

}
////////////////////////////////////////////////////////////////////////
try {

if (bundle != null) {

final Object[] pdusObj = (Object[]) bundle.get("pdus");

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


Intent broadcastIntent = new Intent();
broadcastIntent.setAction("SMS_RECEIVED_ACTION");
String str="sms from :"+senderTel+" \n"+messageBody;
broadcastIntent.putExtra("sms", str);
context.sendBroadcast(broadcastIntent);
Toast.makeText(context, str, Toast.LENGTH_SHORT).show();

}

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


}
}

}


private BroadcastReceiver intentReceiver = new BroadcastReceiver() {

@Override public void onReceive(Context context, Intent intent) {


//---display the SMS received in the TextView---
TextView SMSes = (TextView) findViewById(R.id.txt);
SMSes.setText(intent.getExtras().getString("sms"));

}
};
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

intentFilter = new IntentFilter();
intentFilter.addAction("SMS_RECEIVED_ACTION");



}




<receiver android:name=".IncomingSms">
<intent-filter android:priority="999">
<action android:name="android.provider.Telephony.SMS_RECEIVED"/>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>

gilas1368
پنج شنبه 28 اسفند 1393, 21:47 عصر
من از دستورات به صورت زیر جواب گرفتم :



public void onReceive(Context context, Intent intent) {


final Bundle bundle = intent.getExtras();

if (intent.getAction().equals(ACTION)) {
//Service
Intent serviceIntent = new Intent(context, Main.class);
context.startService(serviceIntent);

}
////////////////////////////////////////////////////////////////////////
try {

if (bundle != null) {

final Object[] pdusObj = (Object[]) bundle.get("pdus");

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


Intent broadcastIntent = new Intent();
broadcastIntent.setAction("SMS_RECEIVED_ACTION");
String str="sms from :"+senderTel+" \n"+messageBody;
broadcastIntent.putExtra("sms", str);
context.sendBroadcast(broadcastIntent);
Toast.makeText(context, str, Toast.LENGTH_SHORT).show();

}

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


}
}

}


private BroadcastReceiver intentReceiver = new BroadcastReceiver() {

@Override public void onReceive(Context context, Intent intent) {


//---display the SMS received in the TextView---
TextView SMSes = (TextView) findViewById(R.id.txt);
SMSes.setText(intent.getExtras().getString("sms"));

}
};
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

intentFilter = new IntentFilter();
intentFilter.addAction("SMS_RECEIVED_ACTION");



}




<receiver android:name=".IncomingSms">
<intent-filter android:priority="999">
<action android:name="android.provider.Telephony.SMS_RECEIVED"/>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>




کار نمیکنه :(

gilas1368
جمعه 29 اسفند 1393, 19:02 عصر
دوستان تونستم بلاخره sms رو بگیرم و بذارمش توی ی edittext حالا میخوام بلافصله بعد از اینکه مقدار کد توی edittext قرار گرفت ی متدی رو اجرا کنم
توی چ eventای میتونم متدم رو فراخوانی کنم؟:متفکر:
الان دارم توی addChangedTextListener و توی متد textChanged مینویسم اما متدم رو اجرا نمیکنه

meysam jahedi
شنبه 01 فروردین 1394, 09:58 صبح
دوستان تونستم بلاخره sms رو بگیرم و بذارمش توی ی edittext حالا میخوام بلافصله بعد از اینکه مقدار کد توی edittext قرار گرفت ی متدی رو اجرا کنم
توی چ eventای میتونم متدم رو فراخوانی کنم؟:متفکر:
الان دارم توی addChangedTextListener و توی متد textChanged مینویسم اما متدم رو اجرا نمیکنه

وقتی اکتیویتی بسته باشه و از برنامه بیرون باشید از طریق این روش sms رو در بکگراند میگیرید اما با فعال نبودن اکتیویتی من نتونستم متدی رو اجرا کنم اما اون چیزی که فکر میکنم مدنظر شماست من دستوراتش رو مستقیما تو خود onReceive نوشتم و انجام شد ، مثلا موقع دریافت sms ی با یه متن خاص یه عملی اجرا بشه