我有一个接收短信的应用程序(通过BroadCastReceiver)并启动一个活动来处理传入的短信(包括播放声音以通知用户,更新数据库并向用户显示消息)。
问题是,有时候应用程序没有运行且手机处于睡眠状态,我什么也没收到,但是一旦解锁屏幕,我就会收到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);
}
}
有什么想法吗?
答案 0 :(得分:1)
在Manifest中注册您的Receiver。像这样:
<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>
答案 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();
}