0

SMSを(BroadCastReceiver経由で)受信し、着信SMSを処理するアクティビティを開始するアプリがあります(ユーザーに通知するためのサウンドの再生、データベースの更新、ユーザーへのメッセージの表示など)。

問題は、そのアプリが実行されておらず、モバイルがスリープ状態になっている場合があります。画面のロックを解除するとすぐに4つまたは5つのメッセージが表示されます。

編集:BroadcastReceiverの定義:

    <receiver
        android:name=".util.sms.SmsReceiver"
        android:enabled="true" >
        <intent-filter android:priority="999" >
            <action android:name="android.intent.action.DATA_SMS_RECEIVED" />
            <data android:scheme="sms" />
            <data android:port="56790" />
        </intent-filter>
    </receiver>

私の活動の定義:

    <activity
        android:name=".MyActivity"
        android:launchMode="singleInstance">
    </activity>

内部活動:

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


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

BroadcastReceiverからMyActivityを開始します。

@Override
public void onReceive(Context context, Intent intent) {
        //...
        if( smsIsMine() ) {
    Intent intent = new Intent();
    intent.putExtra("MESSAGE_BODY", sms.getBody());
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    intent.setClass(context, MyActivity.class);
    context.startActivity(intent);                
        }
    }

何か案が?

4

2 に答える 2

1

受信者をマニフェストに登録します。このような:

<receiver android:name="com.app.SMSReceiver" android:enabled="true"> 
        <intent-filter android:priority="999"> 
            <action android:name="android.provider.Telephony.SMS_RECEIVED"/> 
        </intent-filter> 
    </receiver>
于 2013-01-11T06:42:56.663 に答える
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:55:16.993 に答える