如何在 android 中发送有关我的位置地址的短信
How to send sms about my location address in android
我是 android 技术的新手。就在我开始学习前一周。我正在尝试使用我注册的手机号码发送有关我的位置的详细信息。它仅在 SONY 移动设备上运行良好。谁能帮我。这是我正在使用的代码。
private void SendSMsandGeocoder() {
Geocoder ageocoder=new Geocoder(myContext);
try {
TelephonyManager atele=(TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
String adata=atele.getDeviceId();
AccountManager AAcm=AccountManager.get(myContext);
Account[] aAccarray=AAcm.getAccounts();
Log.e("account manager",aAccarray.toString());
for (Account ac : aAccarray) {
String acname = ac.name;
String actype = ac.type;
Log.e("acname",acname);
Log.e("actype", actype);
Log.e("account details",acname+actype);
myAcnameget= acname;
}
double mySourcelat =mygpsclass.Findlatitude();
double mySourcelng =mygpsclass.FindLongitude();
Log.e("Gps cordinates", mySourcelat+","+mySourcelng);
List<Address> aList=ageocoder.getFromLocation(mySourcelat, mySourcelng, 2);
String aPlacename=aList.get(0).getLocality();
Log.e("location name",aPlacename);
String aSublocality=aList.get(0).getSubLocality();
Log.e("Sub locality",aSublocality);
String mySourceplace=mySourcelat+","+mySourcelng;
String aaddress=aList.get(0).getFeatureName();
Log.e("feature name",aaddress);
String aaddress1=aList.get(0).getPostalCode();
Log.e("through fare",aaddress1);
String aAddressfull=aSublocality+","+aaddress+","+aPlacename+","+aaddress1;
String aSendmsgcontent="The User Of the IMEI no:"+adata+" was in Co-ordinates:" +mySourceplace+" and their address was "+aAddressfull+","+ myAcnameget;
Log.e("Full address With msg", aSendmsgcontent);
myHashmap=myDbclass.GetConDetails();
myCon1=myHashmap.get("Contact1");
Log.e("Contact 1",myCon1);
myCon2=myHashmap.get("Contact2");
Log.e("Contact 2",myCon2);
myCon3=myHashmap.get("Contact3");
Log.e("Contact 3",myCon3);
myCon4=myHashmap.get("Contact4");
Log.e("Contact 4",myCon4);
myCon5=myHashmap.get("Contact5");
Log.e("Contact 5",myCon5);
SmsManager aSms=SmsManager.getDefault();
aSms.sendTextMessage(myCon1, null,aSendmsgcontent, null, null);
aSms.sendTextMessage(myCon2, null,aSendmsgcontent, null, null);
aSms.sendTextMessage(myCon3, null,aSendmsgcontent, null, null);
aSms.sendTextMessage(myCon4, null,aSendmsgcontent, null, null);
aSms.sendTextMessage(myCon5, null,aSendmsgcontent, null, null);
} catch (Exception e) {
Log.e("sms", e.toString());
}
}
@ARAVIND RAJ 很简单
在你的manifest.xml中添加
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.SEND_SMS" />
将此添加到您的 java
GPSTracker gpsTracker = new GPSTracker(this);
String temp;
if (gpsTracker.canGetLocation())
{
String stringLatitude = String.valueOf(gpsTracker.latitude);
String stringLongitude = String.valueOf(gpsTracker.longitude);
String country = gpsTracker.getCountryName(this);
String city = gpsTracker.getLocality(this);
String postalCode = gpsTracker.getPostalCode(this);
String addressLine = gpsTracker.getAddressLine(this);
temp = stringLatitude + " " + stringLongitude ;
}
else
{
// can't get location
// GPS or Network is not enabled
// Ask user to enable GPS/network in settings
}
}
String phoneNo = "123243444" ;// put yout phone number here
try {
SmsManager smsManager = SmsManager.getDefault();
smsManager.sendTextMessage(phoneNo, null, temp, null, null);
Toast.makeText(getApplicationContext(), "Message Sent",
Toast.LENGTH_LONG).show();
} catch (Exception ex) {
ex.printStackTrace();
}
制作一个class文件如下
public class GPSTracker extends Service implements LocationListener
{
private final Context mContext;
//flag for GPS Status
boolean isGPSEnabled = false;
//flag for network status
boolean isNetworkEnabled = false;
boolean canGetLocation = false;
Location location;
double latitude;
double longitude;
//The minimum distance to change updates in metters
private static final long MIN_DISTANCE_CHANGE_FOR_UPDATES = 10; //10 metters
//The minimum time beetwen updates in milliseconds
private static final long MIN_TIME_BW_UPDATES = 1000 * 60 * 1; // 1 minute
//Declaring a Location Manager
protected LocationManager locationManager;
public GPSTracker(Context context)
{
this.mContext = context;
getLocation();
}
public Location getLocation()
{
try
{
locationManager = (LocationManager) mContext.getSystemService(LOCATION_SERVICE);
//getting GPS status
isGPSEnabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
//getting network status
isNetworkEnabled = locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
if (!isGPSEnabled && !isNetworkEnabled)
{
// no network provider is enabled
}
else
{
this.canGetLocation = true;
//First get location from Network Provider
if (isNetworkEnabled)
{
locationManager.requestLocationUpdates(
LocationManager.NETWORK_PROVIDER,
MIN_TIME_BW_UPDATES,
MIN_DISTANCE_CHANGE_FOR_UPDATES, this);
Log.d("Network", "Network");
if (locationManager != null)
{
location = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
updateGPSCoordinates();
}
}
//if GPS Enabled get lat/long using GPS Services
if (isGPSEnabled)
{
if (location == null)
{
locationManager.requestLocationUpdates(
LocationManager.GPS_PROVIDER,
MIN_TIME_BW_UPDATES,
MIN_DISTANCE_CHANGE_FOR_UPDATES, this);
Log.d("GPS Enabled", "GPS Enabled");
if (locationManager != null)
{
location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
updateGPSCoordinates();
}
}
}
}
}
catch (Exception e)
{
//e.printStackTrace();
Log.e("Error : Location", "Impossible to connect to LocationManager", e);
}
return location;
}
public void updateGPSCoordinates()
{
if (location != null)
{
latitude = location.getLatitude();
longitude = location.getLongitude();
}
}
/**
* Stop using GPS listener
* Calling this function will stop using GPS in your app
*/
public void stopUsingGPS()
{
if (locationManager != null)
{
locationManager.removeUpdates(GPSTracker.this);
}
}
/**
* Function to get latitude
*/
public double getLatitude()
{
if (location != null)
{
latitude = location.getLatitude();
}
return latitude;
}
/**
* Function to get longitude
*/
public double getLongitude()
{
if (location != null)
{
longitude = location.getLongitude();
}
return longitude;
}
/**
* Function to check GPS/wifi enabled
*/
public boolean canGetLocation()
{
return this.canGetLocation;
}
/**
* Get list of address by latitude and longitude
* @return null or List<Address>
*/
public List<Address> getGeocoderAddress(Context context)
{
if (location != null)
{
Geocoder geocoder = new Geocoder(context, Locale.ENGLISH);
try
{
List<Address> addresses = geocoder.getFromLocation(latitude, longitude, 1);
return addresses;
}
catch (IOException e)
{
//e.printStackTrace();
Log.e("Error : Geocoder", "Impossible to connect to Geocoder", e);
}
}
return null;
}
/**
* Try to get AddressLine
* @return null or addressLine
*/
public String getAddressLine(Context context)
{
List<Address> addresses = getGeocoderAddress(context);
if (addresses != null && addresses.size() > 0)
{
Address address = addresses.get(0);
String addressLine = address.getAddressLine(0);
return addressLine;
}
else
{
return null;
}
}
/**
* Try to get Locality
* @return null or locality
*/
public String getLocality(Context context)
{
List<Address> addresses = getGeocoderAddress(context);
if (addresses != null && addresses.size() > 0)
{
Address address = addresses.get(0);
String locality = address.getLocality();
return locality;
}
else
{
return null;
}
}
/**
* Try to get Postal Code
* @return null or postalCode
*/
public String getPostalCode(Context context)
{
List<Address> addresses = getGeocoderAddress(context);
if (addresses != null && addresses.size() > 0)
{
Address address = addresses.get(0);
String postalCode = address.getPostalCode();
return postalCode;
}
else
{
return null;
}
}
/**
* Try to get CountryName
* @return null or postalCode
*/
public String getCountryName(Context context)
{
List<Address> addresses = getGeocoderAddress(context);
if (addresses != null && addresses.size() > 0)
{
Address address = addresses.get(0);
String countryName = address.getCountryName();
return countryName;
}
else
{
return null;
}
}
@Override
public void onLocationChanged(Location location)
{
}
@Override
public void onProviderDisabled(String provider)
{
}
@Override
public void onProviderEnabled(String provider)
{
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras)
{
}
@Override
public IBinder onBind(Intent intent)
{
return null;
}
}
终于找到错误了。我注释掉了这两行:
// String aaddress1=aList.get(0).getPostalCode();
// Log.e("through fare",aaddress1);
我的代码现在可以正常工作了。非常感谢@Ajeet。
我是 android 技术的新手。就在我开始学习前一周。我正在尝试使用我注册的手机号码发送有关我的位置的详细信息。它仅在 SONY 移动设备上运行良好。谁能帮我。这是我正在使用的代码。
private void SendSMsandGeocoder() {
Geocoder ageocoder=new Geocoder(myContext);
try {
TelephonyManager atele=(TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
String adata=atele.getDeviceId();
AccountManager AAcm=AccountManager.get(myContext);
Account[] aAccarray=AAcm.getAccounts();
Log.e("account manager",aAccarray.toString());
for (Account ac : aAccarray) {
String acname = ac.name;
String actype = ac.type;
Log.e("acname",acname);
Log.e("actype", actype);
Log.e("account details",acname+actype);
myAcnameget= acname;
}
double mySourcelat =mygpsclass.Findlatitude();
double mySourcelng =mygpsclass.FindLongitude();
Log.e("Gps cordinates", mySourcelat+","+mySourcelng);
List<Address> aList=ageocoder.getFromLocation(mySourcelat, mySourcelng, 2);
String aPlacename=aList.get(0).getLocality();
Log.e("location name",aPlacename);
String aSublocality=aList.get(0).getSubLocality();
Log.e("Sub locality",aSublocality);
String mySourceplace=mySourcelat+","+mySourcelng;
String aaddress=aList.get(0).getFeatureName();
Log.e("feature name",aaddress);
String aaddress1=aList.get(0).getPostalCode();
Log.e("through fare",aaddress1);
String aAddressfull=aSublocality+","+aaddress+","+aPlacename+","+aaddress1;
String aSendmsgcontent="The User Of the IMEI no:"+adata+" was in Co-ordinates:" +mySourceplace+" and their address was "+aAddressfull+","+ myAcnameget;
Log.e("Full address With msg", aSendmsgcontent);
myHashmap=myDbclass.GetConDetails();
myCon1=myHashmap.get("Contact1");
Log.e("Contact 1",myCon1);
myCon2=myHashmap.get("Contact2");
Log.e("Contact 2",myCon2);
myCon3=myHashmap.get("Contact3");
Log.e("Contact 3",myCon3);
myCon4=myHashmap.get("Contact4");
Log.e("Contact 4",myCon4);
myCon5=myHashmap.get("Contact5");
Log.e("Contact 5",myCon5);
SmsManager aSms=SmsManager.getDefault();
aSms.sendTextMessage(myCon1, null,aSendmsgcontent, null, null);
aSms.sendTextMessage(myCon2, null,aSendmsgcontent, null, null);
aSms.sendTextMessage(myCon3, null,aSendmsgcontent, null, null);
aSms.sendTextMessage(myCon4, null,aSendmsgcontent, null, null);
aSms.sendTextMessage(myCon5, null,aSendmsgcontent, null, null);
} catch (Exception e) {
Log.e("sms", e.toString());
}
}
@ARAVIND RAJ 很简单
在你的manifest.xml中添加
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.SEND_SMS" />
将此添加到您的 java
GPSTracker gpsTracker = new GPSTracker(this);
String temp;
if (gpsTracker.canGetLocation())
{
String stringLatitude = String.valueOf(gpsTracker.latitude);
String stringLongitude = String.valueOf(gpsTracker.longitude);
String country = gpsTracker.getCountryName(this);
String city = gpsTracker.getLocality(this);
String postalCode = gpsTracker.getPostalCode(this);
String addressLine = gpsTracker.getAddressLine(this);
temp = stringLatitude + " " + stringLongitude ;
}
else
{
// can't get location
// GPS or Network is not enabled
// Ask user to enable GPS/network in settings
}
}
String phoneNo = "123243444" ;// put yout phone number here
try {
SmsManager smsManager = SmsManager.getDefault();
smsManager.sendTextMessage(phoneNo, null, temp, null, null);
Toast.makeText(getApplicationContext(), "Message Sent",
Toast.LENGTH_LONG).show();
} catch (Exception ex) {
ex.printStackTrace();
}
制作一个class文件如下
public class GPSTracker extends Service implements LocationListener
{
private final Context mContext;
//flag for GPS Status
boolean isGPSEnabled = false;
//flag for network status
boolean isNetworkEnabled = false;
boolean canGetLocation = false;
Location location;
double latitude;
double longitude;
//The minimum distance to change updates in metters
private static final long MIN_DISTANCE_CHANGE_FOR_UPDATES = 10; //10 metters
//The minimum time beetwen updates in milliseconds
private static final long MIN_TIME_BW_UPDATES = 1000 * 60 * 1; // 1 minute
//Declaring a Location Manager
protected LocationManager locationManager;
public GPSTracker(Context context)
{
this.mContext = context;
getLocation();
}
public Location getLocation()
{
try
{
locationManager = (LocationManager) mContext.getSystemService(LOCATION_SERVICE);
//getting GPS status
isGPSEnabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
//getting network status
isNetworkEnabled = locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
if (!isGPSEnabled && !isNetworkEnabled)
{
// no network provider is enabled
}
else
{
this.canGetLocation = true;
//First get location from Network Provider
if (isNetworkEnabled)
{
locationManager.requestLocationUpdates(
LocationManager.NETWORK_PROVIDER,
MIN_TIME_BW_UPDATES,
MIN_DISTANCE_CHANGE_FOR_UPDATES, this);
Log.d("Network", "Network");
if (locationManager != null)
{
location = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
updateGPSCoordinates();
}
}
//if GPS Enabled get lat/long using GPS Services
if (isGPSEnabled)
{
if (location == null)
{
locationManager.requestLocationUpdates(
LocationManager.GPS_PROVIDER,
MIN_TIME_BW_UPDATES,
MIN_DISTANCE_CHANGE_FOR_UPDATES, this);
Log.d("GPS Enabled", "GPS Enabled");
if (locationManager != null)
{
location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
updateGPSCoordinates();
}
}
}
}
}
catch (Exception e)
{
//e.printStackTrace();
Log.e("Error : Location", "Impossible to connect to LocationManager", e);
}
return location;
}
public void updateGPSCoordinates()
{
if (location != null)
{
latitude = location.getLatitude();
longitude = location.getLongitude();
}
}
/**
* Stop using GPS listener
* Calling this function will stop using GPS in your app
*/
public void stopUsingGPS()
{
if (locationManager != null)
{
locationManager.removeUpdates(GPSTracker.this);
}
}
/**
* Function to get latitude
*/
public double getLatitude()
{
if (location != null)
{
latitude = location.getLatitude();
}
return latitude;
}
/**
* Function to get longitude
*/
public double getLongitude()
{
if (location != null)
{
longitude = location.getLongitude();
}
return longitude;
}
/**
* Function to check GPS/wifi enabled
*/
public boolean canGetLocation()
{
return this.canGetLocation;
}
/**
* Get list of address by latitude and longitude
* @return null or List<Address>
*/
public List<Address> getGeocoderAddress(Context context)
{
if (location != null)
{
Geocoder geocoder = new Geocoder(context, Locale.ENGLISH);
try
{
List<Address> addresses = geocoder.getFromLocation(latitude, longitude, 1);
return addresses;
}
catch (IOException e)
{
//e.printStackTrace();
Log.e("Error : Geocoder", "Impossible to connect to Geocoder", e);
}
}
return null;
}
/**
* Try to get AddressLine
* @return null or addressLine
*/
public String getAddressLine(Context context)
{
List<Address> addresses = getGeocoderAddress(context);
if (addresses != null && addresses.size() > 0)
{
Address address = addresses.get(0);
String addressLine = address.getAddressLine(0);
return addressLine;
}
else
{
return null;
}
}
/**
* Try to get Locality
* @return null or locality
*/
public String getLocality(Context context)
{
List<Address> addresses = getGeocoderAddress(context);
if (addresses != null && addresses.size() > 0)
{
Address address = addresses.get(0);
String locality = address.getLocality();
return locality;
}
else
{
return null;
}
}
/**
* Try to get Postal Code
* @return null or postalCode
*/
public String getPostalCode(Context context)
{
List<Address> addresses = getGeocoderAddress(context);
if (addresses != null && addresses.size() > 0)
{
Address address = addresses.get(0);
String postalCode = address.getPostalCode();
return postalCode;
}
else
{
return null;
}
}
/**
* Try to get CountryName
* @return null or postalCode
*/
public String getCountryName(Context context)
{
List<Address> addresses = getGeocoderAddress(context);
if (addresses != null && addresses.size() > 0)
{
Address address = addresses.get(0);
String countryName = address.getCountryName();
return countryName;
}
else
{
return null;
}
}
@Override
public void onLocationChanged(Location location)
{
}
@Override
public void onProviderDisabled(String provider)
{
}
@Override
public void onProviderEnabled(String provider)
{
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras)
{
}
@Override
public IBinder onBind(Intent intent)
{
return null;
}
}
终于找到错误了。我注释掉了这两行:
// String aaddress1=aList.get(0).getPostalCode();
// Log.e("through fare",aaddress1);
我的代码现在可以正常工作了。非常感谢@Ajeet。