0

我有一个应用程序接收短信(通过 BroadCastReceiver)并启动一个 Activity 来处理传入的短信(包括播放声音以通知用户、更新数据库和向用户显示消息)。

问题是有时该应用程序没有运行并且手机处于睡眠状态,我什么也没有收到,但一旦我解锁屏幕,我就会收到 4 或 5 条消息!

编辑:广播接收器的定义:

    <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

在 Manifest 中注册您的接收方。像这样:

<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 回答