[英]OnReceive not being called as it should
通過四處搜尋,我找到了一種掃描該區域內wifi網絡並通過TextView顯示這些結果的方法。 這是代碼:
受保護的void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.wifinetworks);
mainText = (TextView) findViewById(R.id.mainText);
mainText.setText("");
mWifiManager = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE);
if(mWifiManager.isWifiEnabled()==false)
{
mWifiManager.setWifiEnabled(true);
}
receiverWifi = new WifiReceiver();
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION);
registerReceiver(receiverWifi, intentFilter);
mainText.setText("Starting Scan...");
mWifiManager.startScan();
}
public class WifiReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Log.i(debugString, "I am in onRecieve");
List<ScanResult> wifiScanList = mWifiManager.getScanResults();
mainText.setText("");
for (int i = 0; i < wifiScanList.size(); i++) {
String info = (wifiScanList.get(i).toString());
mainText.append(info + "\n\n");
}
}
}
日志語句似乎從未被調用,並且清單文件中具有以下權限:
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
這里可能出什么問題了? 感謝任何建議。
編輯:我意識到我沒有在清單中聲明我的接收器,所以我做了一個WifiReceiver類(上面有更改),並這樣聲明了它:
<receiver android:name="com.example.alexander.bluetoothcontroller.MainActivity$WifiReceiver" android:exported="true">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"/>
<action android:name="android.intent.action.INPUT_METHOD_CHANGED" />
</intent-filter>
</receiver>
但是,除非我在聲明中缺少某些內容,否則這仍然沒有任何改變。 我還添加了建議的額外權限,但仍然沒有任何更改。 我確實注意到了這個在logcat中脫穎而出的調用棧:
08-09 14:27:17.821 1579-1622 /? E / WifiHW:無法停止請求方08-09 14:27:17.821 1579-1622 /? E / wifi:無法初始化供應商功能指針表08-09 14:27:17.821 1579-1622 /? E / WifiNative-HAL:無法啟動hal 08-09 14:27:17.821 1579-1622 /? E / WifiStateMachine:無法啟動HAL 08-09 14:27:17.821 1579-1622 /? E / WifiHW:無法打開“ /system/etc/wifi/wpa_supplicant.conf”:沒有這樣的文件或目錄08-09 14:27:17.821 1579-1622 /? E / WifiHW:無法啟用Wi-Fi 08-09 14:27:17.821 1579-1622 /? E / WifiStateMachine:無法啟動請求方! 08-09 14:27:17.822 1579-1579 /? E / WifiController:WifiControllerWifi開啟失敗
這可能是問題嗎?
編輯2:
因此,我嘗試在運行時檢查權限,但仍然沒有任何更改。
private boolean checkAndRequestPermissions() {
int wifi_state = ContextCompat.checkSelfPermission(this, permission.ACCESS_WIFI_STATE);
int change_wifi_state = ContextCompat.checkSelfPermission(this, permission.CHANGE_WIFI_STATE);
int loc = ContextCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_COARSE_LOCATION);
int loc2 = ContextCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_FINE_LOCATION);
int internet = ContextCompat.checkSelfPermission(this, permission.INTERNET);
List<String> listPermissionsNeeded = new ArrayList<>();
if (wifi_state != PackageManager.PERMISSION_GRANTED) {
listPermissionsNeeded.add(permission.ACCESS_WIFI_STATE);
}
if (change_wifi_state != PackageManager.PERMISSION_GRANTED) {
listPermissionsNeeded.add(permission.CHANGE_WIFI_STATE);
}
if (loc2 != PackageManager.PERMISSION_GRANTED) {
listPermissionsNeeded.add(android.Manifest.permission.ACCESS_FINE_LOCATION);
}
if (loc != PackageManager.PERMISSION_GRANTED) {
listPermissionsNeeded.add(android.Manifest.permission.ACCESS_COARSE_LOCATION);
}
if (internet != PackageManager.PERMISSION_GRANTED) {
listPermissionsNeeded.add(permission.INTERNET);
}
if (!listPermissionsNeeded.isEmpty())
{
ActivityCompat.requestPermissions(this,listPermissionsNeeded.toArray
(new String[listPermissionsNeeded.size()]),REQUEST_ID_MULTIPLE_PERMISSIONS);
return false;
}
return true;
}
我在onCreate中調用此方法。 我仍然收到Controller Wifi也無法打開的調用堆棧消息,我認為這是越來越多的問題。
要通過藍牙和Wi-Fi掃描訪問附近的外部設備的硬件標識符,您的應用現在必須具有ACCESS_FINE_LOCATION或ACCESS_COARSE_LOCATION權限
嘗試添加缺少的權限ACCESS_COARSE_LOCATION
來源: https : //developer.android.com/about/versions/marshmallow/android-6.0-changes.html#behavior-hardware-id
這個問題是我的一個錯誤,當我應該使用實際的手機時,我正在使用android模擬器來測試我的應用程序。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.