2013-03-10 88 views
1

我正在開發一種安全應用程序,它將通過SMS遠程觸發。我的問題是:即使手機被鎖定,確保我的激活短信將激活服務的最佳方式是什麼? 我不想惹用戶耗盡他們的電池,通常應用程序什麼也不做,只要它被激活。遠程激活android服務 - 即使在鎖定的設備上

回答

1

最好的方法是使用清單中聲明的​​廣播接收器+ intentservice來執行您想要的操作。

聲明清單中的接收器:

<receiver android:name="yourpackege.YourReceiver"> 
    <intent-filter> 
    <action android:name="android.provider.Telephony.SMS_RECEIVED"/> 
    </intent-filter> 

接收器:

public class YourReceiver extends BroadcastReceiver { 
    . 
    . 
    . 
@Override 
public void onReceive(Context context, Intent intent) { 
    Bundle bundle = intent.getExtras(); 
    if (bundle != null) { 
     Object[] pdus = (Object[]) bundle.get("pdus"); 
     SmsMessage[] messages = new SmsMessage[pdus.length]; 
     for (int i = 0; i < pdus.length; i++) 
      messages[i] = SmsMessage.createFromPdu((byte[]) pdus[i]); 
     notifyMessages(context, messages); 
    }  
} 

而且在notifyMessages觸發執行實際工作的intentservice。通過這種方式,廣播接收機將只執行一次獲取消息。 這樣你就不會惹上電池,但你只有在手機收到短信時才運行一些代碼。

private void notifyMessages(Context c, SmsMessage[] messages) { 
    Log.d("SMS", "Received message"); 
    for(SmsMessage m : messages){ 
       if(isActivationMessage(m){ 
     Intent serviceIntent = new Intent(c, YourIntentService.class); 
     serviceIntent.putExtra(); // Put all your extras here 
     c.startService(myServiceIntent); 
} 
+0

我以爲是一樣的,我只是不確定服務會在所有情況下觸發。你怎麼看,我應該檢查接收機中的短信文本指定的激活詞,或者始終運行服務,並在那裏做所有事情? - 我問這是因爲提到的電池耗盡。 – keybee 2013-03-10 14:02:27

+0

服務應該在所有情況下觸發,特別是因爲設備被短信喚醒。如果你想超級確定,請查看https://github.com/commonsguy/cwac-wakeful。對於第二個問題,我想說這取決於你做什麼檢查。在接收器中執行一堆ifs肯定比運行intent服務要便宜,因爲它涉及分配對象和運行新線程(即使os執行池)。 – fedepaol 2013-03-10 14:06:04

+0

感謝您的快速幫助! – keybee 2013-03-10 14:09:32