1

我正在开发一种安全应用程序,它将远程触发(通过短信)。我的问题是:即使手机被锁定,确保我的激活短信激活服务的最佳方法是什么?我不想惹用户耗尽他们的电池,通常应用程序什么都不做,只有当它被激活时。

4

1 回答 1

1

最好的方法是使用清单中声明的​​广播接收器+意图服务来执行您想要的。

在清单中声明接收者:

<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 中触发一个执行实际工作的意图服务。这样,广播接收器将执行获取消息的时间。通过这种方式,您不会弄乱电池,但只有在手机收到短信时才运行一些代码。

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);
}
于 2013-03-10T13:52:23.663 回答