1

私は一種のセキュリティアプリを開発しています。これはリモートで(SMSによって)トリガーされます。私の質問は、電話がロックされている場合でも、アクティベーションSMSがサービスをアクティベートすることを保証するための最良の方法は何ですか?私はユーザーをいじってバッテリーを消耗させたくありません。通常、アプリはアクティブ化されている場合にのみ何もしません。

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で、実際の作業を実行するintentserviceをトリガーします。このようにして、ブロードキャストレシーバーはメッセージを取得する時間だけ実行します。このようにして、バッテリーを台無しにすることはありませんが、電話がSMSを受信したときにのみコードを実行します。

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 に答える