Я пытаюсь отправить автоматический ответ при получении смс, используя BroadcastReceiver
для прослушивания смс и SmsManager
для отправки ответа, но автоматический ответ не работает. Примечание: Если я звоню smsManager.sendTextMessage(phoneNo, null, msg, null, null);
из onCreate, оно действительно отправляет сообщение, но проблема в том, когда я пытаюсь вызвать его из messageReceived
.Я также попытался использовать registerReceiver
вместо bindListener
, но произошло то же самое.
При запуске на эмуляторе отображаются все тосты (но я не могу проверить, отправлено ли сообщение на эмуляторе).При работе на устройстве, подключенном через USB-кабель, «отправка сообщения» Тост не отображается.
Буду очень признателен за вашу помощь.Спасибо
public class MainActivity extends AppCompatActivity implements SmsListener, View.OnClickListener{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.SEND_SMS) != PackageManager.PERMISSION_GRANTED){
requestSMSPermission();
}
else{
SmsReceiver.bindListener(this);
Toast.makeText(this, "listening", Toast.LENGTH_SHORT).show();
}
}
@Override
public void messageReceived(String messageText, String sender) {
Toast.makeText(getBaseContext(), "sending the message", Toast.LENGTH_SHORT).show();
SmsManager smsManager = SmsManager.getDefault();
smsManager.sendTextMessage(sender, null, messageText, null, null);
}
private void requestSMSPermission(){
if(ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.SEND_SMS)){
new AlertDialog.Builder(this)
.setTitle("Permission needed").setMessage("This permission is needed in order to send automatic reply")
.setPositiveButton("ok", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
ActivityCompat.requestPermissions(MainActivity.this,new String[]{Manifest.permission.SEND_SMS},READ_SMS_PERMISSION_CODE);
}
})
.setNegativeButton("cancel", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
dialogInterface.dismiss();
}
}).create().show();
}
else{
ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.SEND_SMS},READ_SMS_PERMISSION_CODE);
}
}
}
Класс получателя:
public class SmsReceiver extends BroadcastReceiver {
private static SmsListener mListener;
@Override
public void onReceive(Context context, Intent intent) {
Bundle data = intent.getExtras();
Object[] pdus = (Object[]) data.get("pdus");
String sender = null;
for(int i=0; i<pdus.length; i++){
SmsMessage smsMessage = SmsMessage.createFromPdu((byte[]) pdus[i]);
sender = smsMessage.getOriginatingAddress();
String messageBody = smsMessage.getMessageBody();
mListener.messageReceived(messageBody,sender);
}
}
public static void bindListener(SmsListener listener) {
mListener = listener;
}
}
Интерфейс слушателя:
public interface SmsListener {
public void messageReceived(String messageText, String sender);
}
Манифест:
<uses-permission android:name="android.permission.READ_SMS" />
<uses-permission android:name="android.permission.RECEIVE_SMS" />
<uses-permission android:name="android.permission.SEND_SMS" />
<receiver android:name=".SmsReceiver">
<intent-filter>
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
</receiver>