簡體   English   中英

手機鎖定數小時后,BroadcastReceiver停止工作

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM