[英]BroadcastReceiver stops working after few hours the phone was locked
我已经在寻找解决此问题的方法,但是找不到。 让我先讨论这个问题。
我有一个使用Intellij创建的广播接收器。 从intellij,使用run命令,将APK加载到在Android 2.2.1上运行的手机。 起初,广播接收器工作良好,但是当电话锁定后,几个小时后广播接收器似乎停止工作。
我想我已经配置了androidmanifest.xml,代码也可以,因为它在手机锁定之前和手机解锁时都可以正常工作。
无论如何,下面是涉及此代码的代码段。
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.sample.smsapp"
android:versionCode="1"
android:versionName="1.0">
<uses-sdk android:minSdkVersion="8"/>
<uses-permission android:name="android.permission.RECEIVE_SMS"/>
<uses-permission android:name="android.permission.READ_SMS" />
<application android:label="@string/app_name">
<receiver android:name=".SmsReceiver"
android:enabled="true"
android:exported="true">
<intent-filter android:priority="1000">
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
</receiver>
<activity android:name=".SMSApp"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
</application>
</manifest>
这是广播接收器片段:
public class SmsReceiver extends BroadcastReceiver {
final SmsManager sms = SmsManager.getDefault();
@Override
public void onReceive(Context context, Intent intent) {
String textMessage = getReceivedMessage(context, intent);
SharedPreferences pref = context.getSharedPreferences("smsapp", context.MODE_PRIVATE);
try {
GMailSender sender = new GMailSender("test@email.com", "pass");
sender.sendMail("New Message Received",
getReceivedMessage(context, intent),
"test@email.com",
"recvr@email.com");
} catch (Exception e) {
Log.e("SendMail", e.getMessage(), e);
}
}
}
公共类SMSApp扩展了活动{
/**
* Called when the activity is first created.
*/
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
}
请让我知道是否可能导致此问题的原因以及我可能采取的步骤,以便将其解决。
谢谢!!!
编辑:只是加起来,我尝试使用模拟器,但效果很好...
您可以尝试使用Asynctask() doinBackground()函数将代码逻辑置于后台。
可能发生的情况是,由于手机已被锁定一段时间,因此进入了深度睡眠模式,并且cpu已关闭。 如果您需要它保持活动状态,则可能需要使用WakeLock进行检查 。
但是请注意,由于这会阻止CPU关闭,因此会导致电池消耗更快。 因此,无论是否启用它,您都可以将其设为用户选项。
您将来不需要WakeLock进行某些工作的另一种可能性是使用AlarmManager ,但这仅在您想在将来某个已知时间做某事时有用。
我不认为WakeLock
是答案。 我经常使用BroadcastReceiver
来接收系统BroadcastReceiver
的Intent,从来没有遇到过这个问题。
不确定这是否是您的问题,但请参考IntentFilter
文档中的此代码段
该值必须是整数,例如“ 100”。 数字越高优先级越高。 缺省值为0。该值必须大于-1000并且小于1000。
所以也许看看如果您尝试999会发生什么?
编辑:或者,您是否看过WakefulBroadcastReceivers
? 这将BroadcastReceiver
与部分唤醒锁结合在一起,以确保在CPU再次进入睡眠状态之前已处理所有活动。 因此,如果您实际上遇到了唤醒锁问题,则可以解决此问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.