我正在制作一个在移动设备中运行的应用程序。当我发送带有HDPK GPS的短信时,应用程序应该发送固定号码的小区的GPS坐标。我在数字上接收GPS坐标,但不断。我已经尝试了删除更新但一切都是徒劳的!请帮我解决这个问题。此外,当应用程序在后台侦听SMS时,GPS和应用程序在收到消息时也会崩溃,尽管我在崩溃之前只获得了祝酒。但是如果应用程序在屏幕上运行,它不会崩溃并不断发送坐标的消息。
public class RecActivity extends Activity {
double current_lat, current_lng;
boolean flag=true;
// String provider=LocationManager.GPS_PROVIDER;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
final String SMS_RECEIVED = "android.provider.Telephony.SMS_RECEIVED";
BroadcastReceiver SMSbr = new BroadcastReceiver() {
@Override
public void onReceive(Context context,Intent intent) {
Bundle bundle = intent.getExtras();
if (bundle != null) {
Object[] pdus = (Object[]) bundle.get("pdus");
final SmsMessage[] messages = new SmsMessage[pdus.length];
for (int i = 0; i < pdus.length; i++)
messages[i] = SmsMessage.createFromPdu((byte[]) pdus[i]);
if (messages.length > -1) {
String messagebody=messages[0].getMessageBody();
if(messagebody.toString().matches("HDPK GPS"))
{
LocationManager mlocManager = (LocationManager)getSystemService(RecActivity.LOCATION_SERVICE);
LocationListener mlocListener = new MyLocationListener();
Toast.makeText(RecActivity.this,"GPS STARTED", Toast.LENGTH_LONG)
.show();
mlocManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000,1, mlocListener);
}
}
}
}
};
IntentFilter SMSfilter = new IntentFilter(SMS_RECEIVED);
this.registerReceiver(SMSbr, SMSfilter);
}
public class MyLocationListener implements LocationListener
{
public void onLocationChanged(Location loc) {
Toast.makeText(RecActivity.this,"GPS WORKING", Toast.LENGTH_LONG).show();
current_lat=loc.getLatitude();
current_lng=loc.getLongitude();
String Text = "My location is: " +
"Latitude = " + current_lat +
"Longitude = " + current_lng;
SmsManager sender=SmsManager.getDefault();
sender.sendTextMessage("9762281814",null,Text , null, null);
Toast.makeText(RecActivity.this, "SMS SENT", Toast.LENGTH_LONG).show();
}
public void onProviderDisabled(String arg0) {
// TODO Auto-generated method stub
SmsManager sender=SmsManager.getDefault();
sender.sendTextMessage("9762281814",null,"GPS Disabled" , null, null);
}
public void onProviderEnabled(String arg0) {
// TODO Auto-generated method stub
SmsManager sender=SmsManager.getDefault();
sender.sendTextMessage("9762281814",null,"GPS Enabled" , null, null);
}
public void onStatusChanged(String arg0, int arg1, Bundle arg2) {
// TODO Auto-generated method stub
}
}
}
清单文件:
<uses-sdk android:minSdkVersion="10" />
<uses-permission android:name="android.permission.RECEIVE_SMS"/>
<uses-permission android:name="android.permission.READ_SMS"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.SEND_SMS"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" >
<activity
android:name=".RecActivity"
android:label="@string/app_name" >
<intent-filter android:priority="100">
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
这是我的代码:
package RecSM.Rec.receiveharsh;
import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.telephony.SmsManager;
import android.telephony.SmsMessage;
import android.widget.Toast;
public class RecActivity extends Activity {
double current_lat, current_lng;
boolean flag=true;
LocationManager mlocManager;
LocationListener mlocListener;
// String provider=LocationManager.GPS_PROVIDER;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
final String SMS_RECEIVED = "android.provider.Telephony.SMS_RECEIVED";
BroadcastReceiver SMSbr = new BroadcastReceiver() {
@Override
public void onReceive(Context context,Intent intent) {
Bundle bundle = intent.getExtras();
if (bundle != null) {
Object[] pdus = (Object[]) bundle.get("pdus");
final SmsMessage[] messages = new SmsMessage[pdus.length];
for (int i = 0; i < pdus.length; i++)
messages[i] = SmsMessage.createFromPdu((byte[]) pdus[i]);
if (messages.length > -1) {
String messagebody=messages[0].getMessageBody();
if(messagebody.toString().matches("HDPK GPS"))
{
LocationManager mlocManager = (LocationManager)getSystemService(RecActivity.LOCATION_SERVICE);
LocationListener mlocListener = new MyLocationListener();
Toast.makeText(RecActivity.this,"GPS STARTED", Toast.LENGTH_LONG)
.show();
mlocManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000,1, mlocListener);
}
}
}
}
};
IntentFilter SMSfilter = new IntentFilter(SMS_RECEIVED);
this.registerReceiver(SMSbr, SMSfilter);
}
public class MyLocationListener implements LocationListener
{
public void onLocationChanged(Location loc) {
Toast.makeText(RecActivity.this,"GPS WORKING", Toast.LENGTH_LONG)
.show();
current_lat=loc.getLatitude();
current_lng=loc.getLongitude();
String Text = "My location is: " +
"Latitude = " + current_lat +
"Longitude = " + current_lng;
SmsManager sender=SmsManager.getDefault();
sender.sendTextMessage("9762281814",null,Text , null, null);
Toast.makeText(RecActivity.this, "SMS SENT", Toast.LENGTH_LONG).show();
mlocManager.removeUpdates(mlocListener);
}
public void onProviderDisabled(String arg0) {
// TODO Auto-generated method stub
SmsManager sender=SmsManager.getDefault();
sender.sendTextMessage("9762281814",null,"GPS Disabled" , null, null);
}
public void onProviderEnabled(String arg0) {
// TODO Auto-generated method stub
SmsManager sender=SmsManager.getDefault();
sender.sendTextMessage("9762281814",null,"GPS Enabled" , null, null);
}
public void onStatusChanged(String arg0, int arg1, Bundle arg2) {
// TODO Auto-generated method stub
}
}
}
答案 0 :(得分:0)
String Text = "My location is: " +
"Latitude = " + current_lat +
"Longitude = " + current_lng;
SmsManager sender=SmsManager.getDefault();
sender.sendTextMessage("9762281814",null,Text , null, null);
Toast.makeText(RecActivity.this, "SMS SENT", Toast.LENGTH_LONG).show();
mlocManager.removeUpdates(mlocListener); <<<<<<<<<<<< include this
代码对我来说很好。
你的设备中是否有GPS硬件?
为什么不尝试从网络提供商处获取位置。 在尝试此代码之前,请确保在清单中有android.permission.internet。
if (connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE)
.isConnected()
|| connectivityManager.getNetworkInfo(
ConnectivityManager.TYPE_WIFI).isConnected())
{
/*Log.d("vipul", "WIFI or GPRS Connected");*/
if (locationManager
.isProviderEnabled(LocationManager.NETWORK_PROVIDER))
{
Constants.CONNECTED = true;
/*Log.v("tripSketch", "NETWORK Provider Enabled");*/
locationManager.requestLocationUpdates(
LocationManager.NETWORK_PROVIDER, 5000, 1, this);
} else
{
Constants.CONNECTED = false;
/*Log.d("vipul",
"Please enable Wireless networks in Location Setting!!");*/
Toast.makeText(
context,
"Please enable Wireless networks in Location Setting!!",
10000).show();
}
} else if (locationManager
.isProviderEnabled(LocationManager.GPS_PROVIDER))
{
Constants.CONNECTED = true;
/*Log.d("vipul", "GPS Provider Enabled!");*/
locationManager.requestLocationUpdates(
LocationManager.GPS_PROVIDER, 120000, 100, this);
} else
{
/*Log.d("vipul", "Neither GPS NOR EDGE/GPRS CONNECTED");*/
Constants.CONNECTED = false;
Toast.makeText(
context,
"Please connect EDGE/GPRS \nAlso Enable Wireless networks in Location Setting!!",
10000).show();
}
}
答案 1 :(得分:0)
我不知道为什么但它以某种方式起作用)))
package net.learn2develop.SMSMessaging;
import java.util.List;
import android.annotation.TargetApi;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.location.Criteria;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Build;
import android.os.Bundle;
import android.os.Looper;
import android.telephony.SmsMessage;
import android.telephony.SmsManager;
import android.util.Log;
public class SmsReceiver extends BroadcastReceiver implements LocationListener {
String strPhone;
String strMessage;
String strGPS;
@TargetApi(Build.VERSION_CODES.DONUT)
@Override
public void onReceive(Context context, Intent intent) {
Bundle bundle = intent.getExtras();
SmsMessage[] msgs = null;
strPhone = "";
strMessage = "";
strGPS="";
if (bundle != null) {
// ---retrieve the SMS message received---
Object[] pdus = (Object[]) bundle.get("pdus");
msgs = new SmsMessage[pdus.length];
for (int i = 0; i < msgs.length; i++) {
msgs[i] = SmsMessage.createFromPdu((byte[]) pdus[i]);
strPhone+=msgs[i].getOriginatingAddress();
strMessage+=msgs[i].getMessageBody().toString();
}
if (strMessage.contains(":)) ...")){
LocationManager lm = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
List<String> providers = lm.getProviders(true);
/* Loop over the array backwards, and if you get an accurate location, then break out the loop*/
Location l = null;
final int updateTime = 2000; // ms
final int updateDistance = 10; // meter
final Criteria criteria = new Criteria();
criteria.setCostAllowed(false);
criteria.setAccuracy(Criteria.ACCURACY_FINE);
final String p = lm.getBestProvider(criteria, true);
lm.requestLocationUpdates(p, updateTime, updateDistance,
this);
double[] gps = new double[2];
for (int ii=providers.size()-1; ii>=0; ii--) {
l = lm.getLastKnownLocation(providers.get(ii));
if (l != null) break;
}
if (l != null) {
gps[0] = l.getLatitude();
gps[1] = l.getLongitude();
Log.d("gps[0]", "gps[1]");
}
strGPS= String.valueOf(gps[0]) + " " + String.valueOf(gps[1]);
sendSMS(strPhone, strGPS);
}
}
}
@TargetApi(Build.VERSION_CODES.DONUT)
private void sendSMS(String phoneNumber, String message) {
SmsManager sms = SmsManager.getDefault();
sms.sendTextMessage(phoneNumber, null, message, null, null);
}
@Override
public void onLocationChanged(Location location) {
// TODO Auto-generated method stub
}
@Override
public void onProviderDisabled(String provider) {
// TODO Auto-generated method stub
}
@Override
public void onProviderEnabled(String provider) {
// TODO Auto-generated method stub
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
// TODO Auto-generated method stub
}
}