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