一条短信就可以获取被盗手机的GPS位置(PhoneFinder)

 哎,忙了一中午就搞了一个小实例,发现自己的效率还有待提高,不过,虽说是一个小实例,让我对短信这块掌握了许多!

先贴代码:(必要的解释都在注释中,不懂得可以留言)!

MainActivity:PhoneFinder.java

Code:
  1. package com.android.yhb;  
  2.   
  3. import java.math.BigInteger;  
  4. import java.security.MessageDigest;  
  5. import java.security.NoSuchAlgorithmException;  
  6.   
  7. import android.app.Activity;  
  8. import android.content.SharedPreferences.Editor;  
  9. import android.os.Bundle;  
  10. import android.util.Log;  
  11. import android.view.View;  
  12. import android.view.View.OnClickListener;  
  13. import android.widget.Button;  
  14. import android.widget.EditText;  
  15. import android.widget.TextView;  
  16.   
  17. public class PhoneFinder extends Activity {  
  18.     private EditText edit01;  
  19.     private EditText edit02;  
  20.     private Button button_ok;  
  21.     private TextView textview;  
  22.     static final String PASSWORD_PREF_KEY = "passwd";  
  23.     /** Called when the activity is first created. */  
  24.     @Override  
  25.     public void onCreate(Bundle savedInstanceState) {  
  26.         super.onCreate(savedInstanceState);  
  27.         setContentView(R.layout.main);  
  28.           
  29.         edit01 = (EditText)findViewById(R.id.password);  
  30.         edit02 = (EditText)findViewById(R.id.password_confirm);  
  31.         textview = (TextView)findViewById(R.id.text1);  
  32.         button_ok = (Button)findViewById(R.id.ok);  
  33.         button_ok.setOnClickListener(listener);  
  34.         /*SharedPreferences setting = getSharedPreferences(PASSWORD_PREF_KEY, 0); 
  35.         String t1 = setting.getString("PASSWORD", null); 
  36.         edit01.setText(t1); 
  37.         edit02.setText(t1);*/  
  38.     }  
  39.       
  40.     OnClickListener listener = new OnClickListener() {  
  41.         public void onClick(View v) {  
  42.             String p1 = edit01.getText().toString();  
  43.             String p2 = edit02.getText().toString();  
  44.             if(p1.equals(p2)) {  
  45.                 if(p1.length() >= 6 && p2.length() >= 6) {  
  46.                     Editor edit = getSharedPreferences(PASSWORD_PREF_KEY, MODE_PRIVATE).edit();  
  47.                     String md5hash = getMd5Hash(p1);  
  48.                     edit.putString("PASSWORD", md5hash);  
  49.                     edit.commit();  
  50.                     textview.setText("password updated");  
  51.                 } else {  
  52.                     textview.setText("password must be at least 6 characters");  
  53.                 }  
  54.             } else {  
  55.                 edit01.setText("");  
  56.                 edit02.setText("");  
  57.                 textview.setText("password do not match");  
  58.             }  
  59.         }  
  60.     };  
  61.     //这里是MD5的加密方法  
  62.     public static String getMd5Hash(String input) {   
  63.         try {   
  64.             MessageDigest md = MessageDigest.getInstance("MD5");   
  65.             byte[] messageDigest = md.digest(input.getBytes());   
  66.             BigInteger number = new BigInteger(1,messageDigest);   
  67.             String md5 = number.toString(16);   
  68.                
  69.             while (md5.length() < 32)   
  70.                 md5 = "0" + md5;   
  71.                 return md5;   
  72.         } catch(NoSuchAlgorithmException e) {   
  73.             Log.e("MD5", e.getMessage());   
  74.             return null;   
  75.         }   
  76.     }   
  77. }  

FinderReceiver.java

Code:
  1. package com.android.yhb;  
  2.   
  3. import android.app.Notification;  
  4. import android.app.NotificationManager;  
  5. import android.app.PendingIntent;  
  6. import android.content.BroadcastReceiver;  
  7. import android.content.Context;  
  8. import android.content.Intent;  
  9. import android.content.SharedPreferences;  
  10. import android.location.Location;  
  11. import android.location.LocationManager;  
  12. import android.os.Bundle;  
  13. import android.telephony.gsm.SmsManager;  
  14. import android.telephony.gsm.SmsMessage;  
  15.   
  16. public class FinderReceiver extends BroadcastReceiver {   
  17.       Context context;  
  18.     @Override   
  19.     public void onReceive(Context context, Intent intent) {   
  20.         this.context = context;  
  21.         SharedPreferences passwdfile = context.getSharedPreferences(   
  22.                 PhoneFinder.PASSWORD_PREF_KEY, 0);   
  23.            
  24.         String correctMd5 = passwdfile.getString(PhoneFinder.PASSWORD_PREF_KEY,   
  25.                 null);   
  26.         if (correctMd5 != null) {   
  27.     
  28.             /*SmsMessage[] messages = Telephony.Sms.Intents  
  29.                     .getMessagesFromIntent(intent);*/  
  30.             Bundle bundle = intent.getExtras();  
  31.               Object pdus[] = (Object[]) bundle.get("pdus");//SMS消息的byte[]存储在pdus中  
  32.               SmsMessage smsMessage[] = new SmsMessage[pdus.length];  
  33.                 
  34.             //for (SmsMessage msg : smsMessage) {  
  35.               for(int i = 0; i < smsMessage.length; i++) {  
  36.                   smsMessage[i] = SmsMessage.createFromPdu((byte[])pdus[i]);  
  37.                 if (smsMessage[i].getMessageBody().contains("SMSLOCATE:")) {   
  38.                     String[] tokens = smsMessage[i].getMessageBody().split(":");   
  39.                     if (tokens.length >= 2) {   
  40.                         String md5hash = PhoneFinder.getMd5Hash(tokens[1]);   
  41.     
  42.                         if (md5hash.equals(correctMd5)) {   
  43.                             String to = smsMessage[i].getOriginatingAddress();//以字符串的形式返回发送者(sender)的原始地址   
  44.                             SmsManager sm = SmsManager.getDefault();   
  45.                             /*LocationManager lm =   
  46.                                 (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);  
  47.                             SmsManager sm = SmsManager.getDefault();  
  48.                             Location location = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER);   
  49.                             double latitude = location.getLatitude();     //经度   
  50.                             double longitude = location.getLongitude(); //纬度   
  51.                             double altitude =  location.getAltitude();     //海拔   
  52.                              
  53.                             sm.sendTextMessage(to, null, "经度:" + String.valueOf(latitude) + "纬度:" + String.valueOf(longitude) + "海拔:" + String.valueOf(altitude),    
  54.                                     null, null); */  
  55.                              sm.sendTextMessage(to, null"成功了!"nullnull);  
  56.                             NotificationManager nm =    
  57.                                 (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);   
  58.                             Notification notification = new Notification(android.R.drawable.ic_dialog_info, "您的地理位置", System.currentTimeMillis());  
  59.                             PendingIntent contentIntent = PendingIntent.getActivity(context, 0new Intent(context, PhoneFinder.class), 0);  
  60.                             notification.setLatestEventInfo(context, "GPS地址""你已经被发现了,赶紧把手机还给我,不然我就报警!", contentIntent);  
  61.                             nm.notify(R.string.service_start, notification);  
  62.                         }   
  63.                     }   
  64.                 } }  
  65.             //}   
  66.         }  
  67.     }   
  68. }   

这段代码中我注释了关于GPS的求解过程,主要是因为在模拟器上不好搞GPS的位置,我试着用DDMS的send发送GPS坐标,但是不见效果,不知为何。所以注释掉,我想在真机上肯定会有效果的,因为求解GPS坐标这段代码完整无误,经常用!

这个实例实际上是我在一个论坛里看到的,他的源代码我运行不成功,并且他的源代码好像是基于Android1.0API的,经过多方努力,终于把他改成新版本下的程序,主要改动了第36行代码,第36行代码主要是从pdus中恢复出SmsMessage对象。

你可能感兴趣的:(service,null,dialog,手机,byte,button)