Một lần mà tôi đã có một prob, các bạn đã thực sự hữu ích. Vì vậy, ở đây tôi lại gặp vấn đề khác mà tôi đã rơi vào ...:/getBoolean (EXTRA_NO_CONNECTIVITY) luôn trả về false
Tôi đang chạy NetworkReceiver tùy chỉnh mở rộng BroadcastReceiver. Tôi muốn phát hiện khi điện thoại có kết nối internet để tôi có thể bắt đầu một dịch vụ bất cứ khi nào có. Tôi đã đọc rất nhiều các chủ đề và tất cả các chủ đề nhiều hay ít nhắc đến đoạn mã sau đó không làm việc cho tôi:
public class NetworkReceiver extends BroadcastReceiver {
private static final String tag = NetworkReceiver.class.getSimpleName();
@Override
public void onReceive(Context context, Intent intent) {
Log.i(tag,"****** NetworkReceiver // onReceive()");
boolean noConnection = intent.getBooleanExtra(ConnectivityManager.EXTRA_NO_CONNECTIVITY, false);
if (intent.getAction().equals(ConnectivityManager.CONNECTIVITY_ACTION)) {
Log.i(tag,"****** NetworkReceiver // Network Down?: " + intent.getBooleanExtra(ConnectivityManager.EXTRA_NO_CONNECTIVITY, false));
}
// TODO Bug: Never stops the service. Stays always connected!
if(noConnection) {
Log.i(tag,"****** NetworkReceiver // Stopping Service...");
context.stopService(new Intent(context, FetchService.class));
} else {
Log.i(tag,"****** NetworkReceiver // Starting Service!");
context.startService(new Intent(context, FetchService.class));
}
}
Tôi có vấn đề là logcat luôn trả NetworkDown?: false
và dịch vụ không bao giờ dừng lại (nó khởi động lại mọi lúc). Tôi đã thử nó trên giả lập bằng cách nhấn F8 và tôi cũng đã thử nó trên điện thoại dev của tôi (nó không có SIM, truy cập internet là bởi router wifi của tôi) bằng cách tắt router -> không có truy cập internet được đảm bảo!
My Manifest bao gồm các dòng sau:
...
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<receiver android:name=".NetworkReceiver">
<intent-filter>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
</intent-filter>
</receiver>
...
Tôi cũng nên lưu ý rằng tôi cũng đã cố gắng <action android:name="android.net.ConnectivityManager.CONNECTIVITY_ACTION" />
trong file manifest của tôi không có thay đổi và rằng khi tôi thay đổi dòng: intent.getBooleanExtra(ConnectivityManager.EXTRA_NO_CONNECTIVITY, false)
để intent.getBooleanExtra(ConnectivityManager.EXTRA_NO_CONNECTIVITY, true)
kết quả luôn đúng - và do đó nó luôn cố gắng ngừng dịch vụ của tôi và không bao giờ bắt đầu.
Tôi nghi ngờ rằng Nội dung bổ sung từ Ý định không được đọc chút nào và đó là lý do tại sao giá trị mặc định là getBooleanExtra()
luôn trả về.
PS. Tôi đang sử dụng Android 2.1
Cảm ơn!
Tôi biết phương pháp bạn đã sử dụng. Tuy nhiên tôi hơi ngạc nhiên khi nhiều người đề nghị mã tôi đã sử dụng (tôi cũng đọc nó trên một cuốn sách O'reilly mà tôi vừa mua trên Android!) Nếu tôi không thể tìm thấy một giải pháp với phát sóng CONNECTIVITY_ACTION tôi nghĩ rằng tôi sẽ làm theo ví dụ của bạn và thực hiện kiểm tra trong Dịch vụ của tôi với các phương thức của ConnectivityManager. Cảm ơn bạn đã trả lời :) – snoopaki
Bạn được chào đón @snoopaki - thực sự tôi sẽ thích đến với một giải pháp sử dụng phương pháp của bạn, nhưng tôi chỉ không nhìn thấy những gì đang xảy ra và tại sao. – Shlublu
Tôi thực sự đã thay đổi dịch vụ của mình thành IntentService và việc xử lý thay đổi kết nối trong dịch vụ có ý nghĩa hơn. Vì vậy, tôi nên chọn câu trả lời của bạn như là một trong những quyền !! thx :) – snoopaki