【问题标题】:How to send my location as reply when I receive a message through Broadcast Receiver?当我通过广播接收器收到消息时,如何发送我的位置作为回复?
【发布时间】:2018-03-11 12:41:45
【问题描述】:

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

请帮帮我。

这是我的BroadcastReceiver

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 实现为内部类,但纬度和经度的值为空

【问题讨论】:

  • 很好,你没有提到短信!
  • 我需要发送我当前的纬度和经度作为对通过广播接收器收到的消息的回复我猜这意味着短信@greenapps跨度>

标签: android location broadcastreceiver sms locationlistener


【解决方案1】:

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

获得这些权限

<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);

【讨论】:

  • 首先,你怎么知道他需要权限?你可以先在 cmets 部分问他。其次,api 22和23不需要运行时权限,所以应该是api>23。
  • 我拥有所有这些权限@Radesh
猜你喜欢
  • 2012-07-07
  • 2011-04-23
  • 1970-01-01
  • 2018-02-27
  • 1970-01-01
  • 1970-01-01
  • 2021-12-18
  • 2012-06-05
  • 1970-01-01
相关资源
最近更新 更多