編輯:關於android開發
獲取位置
新建一個service的包
新建一個GPSService類繼承系統的Service類
清單文件中注冊一下
重寫onCreate()方法,服務創建的時候回調
重寫onDestroy()方法,服務銷毀的時候回調
把上一節的代碼拿到這個地方來
得到用戶移動後的最後一次的位置,保存到SP中
轉換標准坐標為火星坐標,數據庫文件放到assets目錄下,把ModifyOffset.java放在service包下面
獲取ModifyOffset對象,通過ModifyOffset.getInstance()方法,參數:輸入流;把資產目錄下的文件轉成輸入流,使用getAssets().open(“文件名”)得到InputStream對象,
調用ModifyOffset對象的s2c()方法,把標准的轉成中國的得到新的PointDouble對象,參數:PointDouble對象,x , y
獲取到經度 PonitDouble對象的y
獲取到緯度 PonitDouble對象的x
把位置數據保存到SP中
接收指令發送位置短信
啟動服務,在接收短信的地方,獲取到Intent對象,調用Context對象的startService()方法
獲取到SP中保存的位置信息
發送短信,SmsManager.getDefault().sendTextMessage()方法,發送短信給安全號碼,參數:sendTextMessage(目標手機, null(來源手機不支持), text, sentIntent, deliveryIntent)後兩個參數,延遲報告和送達報告,不關心填null
需要這個權限 android.permission.SEND_SMS
判斷一下內容是否為空,如果為空發送短信內容是正在獲取,手動讓坐標變化一下,才能正在得到
GPSService.java
package com.qingguow.mobilesafe.service;
import android.app.Service;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.location.Criteria;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.os.IBinder;
public class GPSService extends Service {
private LocationManager lm;
private LocationListener listener;
private SharedPreferences sp;
@Override
public IBinder onBind(Intent arg0) {
return null;
}
// 服務創建
@Override
public void onCreate() {
super.onCreate();
sp=getSharedPreferences("config", MODE_PRIVATE);
// 獲取位置管理器
lm = (LocationManager) getSystemService(LOCATION_SERVICE);
listener = new MyLocationListener();
Criteria criteria = new Criteria();
criteria.setAccuracy(Criteria.ACCURACY_FINE);
String provider = lm.getBestProvider(criteria, true);
lm.requestLocationUpdates(provider, 0, 0, listener);
}
// 服務銷毀
@Override
public void onDestroy() {
super.onDestroy();
lm.removeUpdates(listener);
listener=null;
}
private class MyLocationListener implements LocationListener {
@Override
public void onLocationChanged(Location location) {
// 獲取經度
String longitude = "longitude:" + location.getLongitude();
String latitude = "latitude:" + location.getLatitude();
String acc = "accuracy:" + location.getAccuracy();
// 轉換火星坐標
try {
ModifyOffset offset = ModifyOffset.getInstance(getAssets()
.open("axisoffset.dat"));
PointDouble pinit = offset.s2c(new PointDouble(location
.getLongitude(), location.getLatitude()));
longitude = "longitude:" + pinit.x;
latitude = "latitude:" + pinit.y;
} catch (Exception e) {
e.printStackTrace();
}
//保存數據
Editor editor=sp.edit();
editor.putString("lastlocation", longitude+latitude+acc);
editor.commit();
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
}
@Override
public void onProviderEnabled(String provider) {
}
@Override
public void onProviderDisabled(String provider) {
}
}
}
SmsReceiver.java
package com.qingguow.mobilesafe.receiver;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.media.MediaPlayer;
import android.telephony.SmsManager;
import android.telephony.SmsMessage;
import android.text.TextUtils;
import com.qingguow.mobilesafe.R;
import com.qingguow.mobilesafe.service.GPSService;
public class SmsReceiver extends BroadcastReceiver {
private SharedPreferences sp;
@Override
public void onReceive(Context context, Intent intent) {
sp=context.getSharedPreferences("config", Context.MODE_PRIVATE);
//獲取短信內容
Object[] objs=(Object[]) intent.getExtras().get("pdus");
for(Object obj:objs){
SmsMessage sms=SmsMessage.createFromPdu((byte[])obj);
String body=sms.getMessageBody();
String sender=sms.getOriginatingAddress();
String secSender=sp.getString("secphone", "");
//判斷是安全號碼的短信
if(secSender.equals(sender)){
switch (body) {
case "#*alarm*#"://發送報警音樂
//Toast.makeText(context, "播放報警音樂", 1).show();
MediaPlayer mp=MediaPlayer.create(context, R.raw.alarm);
mp.start();
abortBroadcast();
break;
case "#*location*#"://得到位置信息
Intent intent1=new Intent(context,GPSService.class);
context.startService(intent1);
String lastLocation= sp.getString("lastlocation", "");
//發送短信
if(TextUtils.isEmpty(lastLocation)){
SmsManager.getDefault().sendTextMessage(sender, null,"getting location", null, null);
}else{
SmsManager.getDefault().sendTextMessage(sender, null,lastLocation, null, null);
}
System.out.println("獲取位置消息"+lastLocation);
abortBroadcast();
break;
default:
break;
}
}
}
}
}

android的布局-----GridLayout(網格布局),android網格布局
android的布局-----GridLayout(網格布局),android網格布局學習導圖 (一)簡介 網格布局由GridLayout所代表,在a
HBase Thrift2 CPU過高問題分析
HBase Thrift2 CPU過高問題分析HBase Thrift2 CPU過高問題分析.pdf目錄目錄11.現象描述12.問題定位23.解決方案54.相關代碼51.
電信網絡拓撲圖自動布局
電信網絡拓撲圖自動布局在電信網絡拓撲圖中,很經常需要用到自動布局的功能,在大數據的層級關系中,通過手工一個一個擺放位置是不太現實的,工作量是相當大的,那麼就有了自動布局這
如何處理 android 方法總數超過 65536 . the number of method references in a .dex file exceed 64k,android.dex
如何處理 android 方法總數超過 65536 . the number of method references in a .dex file exceed 64k