내 앱은 통화 중/sms 수신시 1 개의 SMS를 보내야한다고 설계되었습니다. 일부 사용자의 경우 , 1 통화/SMS 수신시 여러 SMS가 발송됩니다. 이유가 확실하지 않은 이유는 무엇입니까? 일부 사용자에게는 발생하는 것으로 보입니다 만 모든 사용자에게 발생할 수있는 잠재적 버그 일 수 있음을 알고 있습니다.앱이 통화/SMS 수신시 복수 SMS 보내기
모든 도움을 주시면 대단히 감사하겠습니다.
어딘가에 if + shared pref 부울을 넣어야합니까?
SmsReceiver
public class SmsReceiver extends BroadcastReceiver {
private String tempMessage = "";
@Override
// when OnRecieve recieves the correct Broadcast. in this case when a sms is recieved
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
//Toast.makeText(context, "onReceive", Toast.LENGTH_SHORT).show();
if (action.equals("android.provider.Telephony.SMS_RECEIVED")) {
//action for sms received
// the actual sms will come in the form of a a 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();
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
SharedPreferences.Editor editor = preferences.edit();
editor.putString("incomingNumber", phoneNumber);
editor.commit();
String message = currentMessage.getDisplayMessageBody();
if (!tempMessage.equalsIgnoreCase(message)) {
if (phoneNumber.contains("+")) {
//TODO after receiver is finished set CHmessageSent pref boolean to false.
Boolean messageSent = preferences.getBoolean("CHmessageSent", false);
if (!messageSent) {
Intent smsIntent = new Intent(context, sendSmsIntentService.class);
context.startService(smsIntent);
//Toast.makeText(context, "startIntent", Toast.LENGTH_SHORT).show();
}
Log.i("SMS_RECEIVER", "senderNumA: " + phoneNumber + "; message: " + message);
}
}
} // End For loop
} // bundle is null
} catch (Exception e) {
Log.e("SmsReciever", "Exeption smsReceiver" + e);
}
} // END IF ction.equals("android.provider.Telephony.SMS_RECEIVED")
}
}
SendSmsIntentService
public class sendSmsIntentService extends IntentService {
private String phoneNumber;
private String defaultSms = "";
private String sms;
//Creates an IntentService. Invoked by your subclass's constructor.
public sendSmsIntentService() {
super("sendSmsIntentService");
}
@Override
protected void onHandleIntent(Intent intent) {
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
SharedPreferences.Editor editor = preferences.edit();
phoneNumber = preferences.getString("incomingNumber", "null");
defaultSms = getString(R.string.drivesafesms);
sms = preferences.getString("message1",defaultSms);
Log.i("SMS_RECEIVER", "senderNumb: " + phoneNumber);
//
try {
SmsManager smsManager = SmsManager.getDefault();
smsManager.sendTextMessage(phoneNumber, null, sms, null, null);
if (!preferences.getBoolean("CHmessageSent",false)) {
editor.putBoolean("CHmessageSent", true);
editor.commit();
}
//Toast.makeText(getApplicationContext(), R.string.receivedCall, Toast.LENGTH_LONG).show();
} catch (Exception e) {
e.printStackTrace();
Toast.makeText(getApplicationContext(), R.string.smsFailed, Toast.LENGTH_LONG).show();
Log.i("CALL_RECEIVER", "senderNum: " + phoneNumber);
}
}
}
을 당신은 선 아래로 문제를 만들 수 있습니다 귀하의 IntentService에서 널 (null)에 대한'phoneNumber'을 확인하지 않습니다. 너의 대답에 대해 –