[英]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.