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