6

Tôi đã đăng ký ConnectivityManager.CONNECTIVITY_ACTION BroadcastReceiver, để nhận các sự kiện trạng thái mạng, nhưng chức năng onReceive của tôi không được gọi khi tôi bật hoặc tắt kết nối wifi của mình.Không thể nhận các sự kiện liên quan đến mạng

Như đã đề cập trong tài liệu, đây là thiết bị thu phát sóng dính được phát khi chúng tôi đăng ký.

Nhưng tôi không nhận được bất kỳ sự kiện nào trong chức năng onReceive khi đăng ký nhận này, nguyên nhân có thể là gì?

Trong tệp kê khai của tôi, tôi có tất cả các quyền truy cập kết nối Internet/Mạng/Wifi và trạng thái của chúng.

Tôi đăng ký với mục đích này sử dụng đoạn mã sau:

registerReceiver(mNetworkStateReceiver, new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION)); 

Trong Logcat của tôi, tôi nhận được sau Thông báo lỗi đăng ký cho máy thu phát sóng này:

01-01 00:05:29.804: ERROR/WifiHW(1305): Unable to open connection to supplicant on "/data/system/wpa_supplicant/wlan0": Connection refused 

gì có thể là nguyên nhân? Có cách nào để tìm hiểu xem BroadcastReceiver có được đăng ký đúng hay không?

Cảm ơn.

+0

Bạn có thấy vấn đề tương tự nếu bạn đăng ký người nhận thông qua tệp kê khai của mình không? Bạn có kết nối wifi có thể sử dụng để truyền dữ liệu không? Có thể đăng mã bạn đang sử dụng trong 'onReceive()' cho 'mNetworkStateReceiver' không? –

+0

Tôi chưa bao giờ cố gắng đăng ký nó thông qua tệp kê khai, tôi sẽ thử trước! – User7723337

+0

bạn có thể xem xét để thưởng bounty.otherwise nó sẽ đi vô ích – Sameer

Trả lời

4

này làm việc cho tôi:

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 

<receiver android:name=".receiver.ConnectivityReceiver"> 
    <intent-filter> 
     <action android:name="android.net.conn.CONNECTIVITY_CHANGE" /> 
    </intent-filter> 
</receiver> 

Code:

public class ConnectivityReceiver extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     Log.d(ConnectivityReceiver.class.getSimpleName(), "action: " 
       + intent.getAction()); 
    } 
} 

và đừng quên đăng ký tất cả các phép mạng.

+0

Đó là đủ ' ' đúng! hoặc chúng ta phải thêm bất kỳ sự cho phép nào khác? – Shravan

+0

Bạn có thể xem http://stackoverflow.com/q/30062487/3742271 này không? – Shravan

3

thử nó bằng cách sử dụng file manifest

<receiver android:name=".MyNetworkStateReceiver" > 
    <intent-filter > 
     <action android:name="android.net.conn.CONNECTIVITY_CHANGE" /> 
    </intent-filter> 
</receiver> 

lớp MyNetworkStateReceiver nên mở rộng BroadcastReceiver

+0

Tôi đang làm điều đó thông qua mã JAVA, không cần phải thêm điều này trong tệp kê khai. – User7723337

0

Trông giống như một vấn đề cấp dưới - Googling lỗi cho thấy nhiều diễn đàn ROM hack và trục trặc wifi của họ. Bạn đang thử nghiệm cái gì? Thử kiểm tra trên thiết bị khác hoặc trình giả lập. (Tôi giả sử bạn đã thử khởi động lại của bạn :))

Ngoài ra, hãy chắc chắn rằng bạn unregister nhận khi hoạt động/dịch vụ bị phá hủy (có lẽ đây có cái gì để làm với các lỗi kết nối)

PS Tôi biết bạn cho biết bạn đã làm nhưng vẫn kiểm tra kỹ bạn có

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 

trong tệp kê khai của bạn.

0

Bạn cũng có thể thử nhận các quyền đối với Internet, WIFI và Khóa đa hướng, hãy thử thêm các quyền này vào các quyền.

<uses-permission android:name="android.permission.INTERNET"/> 
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> 
<uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE"/> 

Tôi cần thiết để sử dụng các phép đối với một trong ứng dụng của nhà tôi đã xây dựng được sử dụng không chỉ WiFi cho việc gửi và nhận dữ liệu mạng, nhưng bất kỳ loại adapter mạng (LAN, RADIO) mà tôi có thể lọc thông qua SDK trong C (Thiết bị phải được bắt nguồn từ). Nhưng sử dụng các điều khoản này tôi không gặp khó khăn gì.