远程激活Android服务 - 即使在锁定的设备上也是如此

时间:2013-03-10 13:26:51

标签: android service remote-access

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

1 个答案:

答案 0 :(得分: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);
}