当我通过广播接收器收到消息时,如何发送我的位置作为回复



我需要发送我当前的纬度和经度作为对通过广播接收器接收的消息的回复。到目前为止,我已经完成了广播接收器和纯文本回复。现在我需要将我的位置添加到其中。

请帮我解决这个问题。

这是我的广播接收器

public class SmsBroadcastReceiver extends BroadcastReceiver {

private static final String TAG = "SmsBroadcastReceiver";
private Listener listener;
public SmsBroadcastReceiver() {
}

@SuppressLint("MissingPermission")
@Override
public void onReceive(Context context, Intent intent) {
    if (intent.getAction().equals(Telephony.Sms.Intents.SMS_RECEIVED_ACTION)) {
        String smsSender = "";
        String smsBody = "";
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
            for (SmsMessage smsMessage : Telephony.Sms.Intents.getMessagesFromIntent(intent)) {
                smsSender = smsMessage.getDisplayOriginatingAddress();
                smsBody += smsMessage.getMessageBody();
            }
        } else {
            Bundle smsBundle = intent.getExtras();
            if (smsBundle != null) {
                Object[] pdus = (Object[]) smsBundle.get("pdus");
                if (pdus == null) {
                    // Display some error to the user
                    Log.e(TAG, "SmsBundle had no pdus key");
                    return;
                }
                SmsMessage[] messages = new SmsMessage[pdus.length];
                for (int i = 0; i < messages.length; i++) {
                    messages[i] = SmsMessage.createFromPdu((byte[]) pdus[i]);
                    smsBody += messages[i].getMessageBody();
                }
                smsSender = messages[0].getOriginatingAddress();
            }
        }

        if (smsBody.startsWith("Lost")) {
            if (listener != null) {
                listener.onTextReceived(smsBody);
                Log.e(TAG, "SMS RECEIVED");
            }


            Toast.makeText(context, smsBody, Toast.LENGTH_SHORT).show();
            SmsManager.getDefault().sendTextMessage(smsSender, null, "Your Phone is at latitude,longitude ", null, null);
        }

    }
}
void setListener(Listener listener) {
    this.listener = listener;
}
interface Listener {
    void onTextReceived(String text);
}
 }

我尝试将LocationListener实现为内部类,但是纬度和经度的值为空

发生这种情况是因为您没有权限。

获取这些权限

<uses-permission android:name="android.permission.READ_SMS"/>
<uses-permission android:name="android.permission.BROADCAST_SMS"
    tools:ignore="ProtectedPermissions" />

以及 API>21

ActivityCompat.requestPermissions(LoginActivity.this,
            new String[]{Manifest.permission.BROADCAST_SMS,Manifest.permission.READ_SMS},
            1);

最新更新