2012-04-06 47 views
-2

考慮到2人擁有該應用程序。當其中一個用戶想知道另一個用戶的位置時,他發送一個短信(內容可以是任何或特定的)。現在當另一個用戶得到短信時(他不應該知道他收到了它)。然後他的位置被髮回給請求它的用戶。 希望解釋清楚。一個會在後臺運行的服務嗎?

public void onReceive(Context context, Intent intent) 
{ 
//this stops notifications to others 
this.abortBroadcast(); 

//---get the SMS message passed in--- 
Bundle bundle = intent.getExtras(); 
SmsMessage[] msgs = null; 
String str = "";    
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]);     
     str += "SMS from " + msgs[i].getOriginatingAddress(); 
     from = msgs[i].getOriginatingAddress(); 
     str += " :"; 
     str += msgs[i].getMessageBody().toString(); 
     msg = msgs[i].getMessageBody().toString(); 
     str += "\n"; 
    } 
    if(checksomething){ 
     //make your actions 
     //and no alert notification and sms not in inbox 
    } 
    else{ 
     //continue the normal process of sms and will get alert and reaches inbox 
     this.clearAbortBroadcast(); 
    } 
    } 

我得到了這段代碼......我應該在這裏做些什麼改變..?

+0

:那麼您需要通過擴展服務類來創建服務有什麼問題? – 2012-04-06 08:13:47

+0

我想創建一個始終運行的服務。並隨時檢查用戶的位置。你能幫我解碼嗎? – 2012-04-06 08:20:19

回答

1

你需要的不是服務,而是位於你想要的位置的用戶側的廣播接收器。

public class SmsReceiver extends BroadcastReceiver { 


    private static final String ACTION_SMS_RECEIVED = 
     "android.provider.Telephony.SMS_RECEIVED"; 


    @Override 
    public void onReceive(Context context, Intent intent) { 


      if(intent.getAction().equals(ACTION_SMS_RECEIVED)){ 
       //your code to get location here. 
      } 

    } 
} 
+0

所以我只需要添加這個...? – 2012-04-06 08:35:46

+0

只要手機收到短信,廣播接收器就會運行。您將必須編寫代碼來讀取位置並在if檢查中將其發回。此外,您需要在清單文件中定義SmsReceiver類。 – 2012-04-06 10:36:11

+0

但這會幫助我發送一個短信自動與位置..? – 2012-04-06 15:20:09

0

通過延長Service。像

public class LocalService extends Service { 
     @Override 
     public void onCreate() { 
    // SEND USER LOCATION 
     } 
     @Override 
     public int onStartCommand(Intent intent, int flags, int startId) { 
      Log.i("LocalService", "Received start id " + startId + ": " + intent); 
      return START_STICKY; 
     } 
     @Override 
     public void onDestroy() { 
     } 
     @Override 
     public IBinder onBind(Intent intent) { 
      return null; 
     } 
     } 
建立正常的服務

AS START YOUR SERVICE:

public final BroadcastReceiver broadcastReceiver = new BroadcastReceiver() { 
     @Override 
     public void onReceive(Context context, Intent intent) { 
      final String action = intent.getAction(); 
      // CHECK SMS IF IT IS FOR SEND LOCTION OR ANY OTHER SMS 
      if (action.equals(ACTION_SMS_RECEIVED)) { 
       //START SERVICE HERE 
      } 

     } 
    }; 

並註冊的BroadcastReceiver爲ACTION_BOOT_COMPLETED ,ACTION_SCREEN_ON,ACTION_SCREEN_OFF處理啓動和服務停止

也許有用:-)

+0

謝謝。那麼得到消息後得到位置怎麼樣?? – 2012-04-06 08:37:54

+0

你想在特定的時間間隔之後發送消息中的用戶位置嗎? – 2012-04-06 08:41:58

+0

不是特定的時間間隔,但當我向用戶發送一條消息時,作爲回報,我應該獲取該位置。 – 2012-04-06 08:46:31