1
我正在開發一種安全應用程序,它將通過SMS遠程觸發。我的問題是:即使手機被鎖定,確保我的激活短信將激活服務的最佳方式是什麼? 我不想惹用戶耗盡他們的電池,通常應用程序什麼也不做,只要它被激活。遠程激活android服務 - 即使在鎖定的設備上
我正在開發一種安全應用程序,它將通過SMS遠程觸發。我的問題是:即使手機被鎖定,確保我的激活短信將激活服務的最佳方式是什麼? 我不想惹用戶耗盡他們的電池,通常應用程序什麼也不做,只要它被激活。遠程激活android服務 - 即使在鎖定的設備上
最好的方法是使用清單中聲明的廣播接收器+ 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);
}
我以爲是一樣的,我只是不確定服務會在所有情況下觸發。你怎麼看,我應該檢查接收機中的短信文本指定的激活詞,或者始終運行服務,並在那裏做所有事情? - 我問這是因爲提到的電池耗盡。 – keybee 2013-03-10 14:02:27
服務應該在所有情況下觸發,特別是因爲設備被短信喚醒。如果你想超級確定,請查看https://github.com/commonsguy/cwac-wakeful。對於第二個問題,我想說這取決於你做什麼檢查。在接收器中執行一堆ifs肯定比運行intent服務要便宜,因爲它涉及分配對象和運行新線程(即使os執行池)。 – fedepaol 2013-03-10 14:06:04
感謝您的快速幫助! – keybee 2013-03-10 14:09:32