在android中,我使用LocationManager找到手机的位置(经度,纬度),如下所示:
LocationManager locationManager=(LocationManager) this.getSystemService(Context.LOCATION_SERVICE);
这应放在Activity中,因为方法getSystemService
是在Activity
类中定义的。 (如果我错了,请纠正我。)
但我希望在没有任何活动的情况下找到手机的位置。我想在收到短信时找到手机的位置。这是我的SMSReceiver类,它扩展了BroadcastReceiver
public class SMSReceiver extends BroadcastReceiver {
private String message;
@Override
public void onReceive(Context context, Intent intent) {
Bundle bundle = intent.getExtras();
SmsMessage[] msgs = null;
if (bundle != null) {
Object[] pdus = (Object[]) bundle.get("pdus");
msgs = new SmsMessage[pdus.length];
if (msgs.length >= 0) {
msgs[0] = SmsMessage.createFromPdu((byte[]) pdus[0]);
message = msgs[0].getMessageBody().toString();
//if it's the locating command
if(message.equals("find location xyz"))
{
PhoneLocater pl = new PhoneLocater();
pl.locatePhone();
}
else
{Toast.makeText(context,"Nothing",Toast.LENGTH_LONG ).show();
}
}
}
}
}
我在我的清单文件中注册我的接收器:
<receiver android:name="com.example.find_me.SMSReceiver">
<intent-filter>
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
有没有办法在不使用任何活动的情况下找到手机的位置?如果没有,你可以告诉我在我的案件中应该做些什么吗? 再说一遍:我想在接收短信时找到手机的位置,我不希望任何活动在那一刻必须运行。
答案 0 :(得分:1)
您可以使用context.getSystemService(Context.LOCATION_SERVICE);
它适用于您的this
关键字活动,因为您的活动是一个上下文。
幸运的是,你有一个上传对象传递给你的onReceive
,只需使用它。
@Override
public void onReceive(Context context, Intent intent) {
LocationManager locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
// whatever you need to do
}