0

私はSMSの送受信で重く機能するアプリを書きました。実際には、いくつかのコマンドをデバイスに送信し、そのデバイスから回答を取得してユーザーに表示します。このアプリの主なアクティビティを次のように定義しました。

<activity
    android:name=".MainActivity"
    android:launchMode="singleTask">
</activity>

複数のインスタンスが同時に実行されないようにするために、singleTaskとして定義されています。MainActivity内に、フォアグラウンドで実行されているときにこのアクティビティへの新しい呼び出しを取得するonNewIntent()メソッドを追加しました。

public void onCreate(Bundle savedInstanceState) {
    // ...
    handleNewMessage(this.getIntent());
}

@Override
public void onNewIntent (Intent intent) {
    // ...
    handleNewMessage(intent);       
}    

sms BroadcastReceiver内で、次のようにFLAG_ACTIVITY_NEW_TASKフラグを使用してこのアクティビティを開始します。

Intent intent = new Intent();
intent.putExtra("MESSAGE_BODY", sms.getBody());
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setClass(context, MainActivity.class);
context.startActivity(intent);

問題はそれです

1-時々私は3-4のテキストメッセージを受け取りますが、MainActivityは開始しません。電話がかかってきたり、電話のロックを解除したりすると、すべてのメッセージが同時にアプリ(MainActivity)を起動します。

2-画面を2〜3秒間オンにして、テキストメッセージを受信した後、電話のロックを自動的に解除したいのですが、方法がわかりません。

4

1 に答える 1

0

解決策は以下のように使用することですWakeLock

@Override
public void onReceive(Context context, Intent intent) {
    PowerManager powerManager = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
    PowerManager.WakeLock wl = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "");
    wl.acquire();
    // your code ...
    wl.release();
}
于 2013-10-30T13:52:36.350 に答える