通過在SO上搜索,我找到了一種方法來掃描區域中的WiFi網絡並通過TextView顯示這些結果。下面是代碼:OnReceive未被調用,因爲它應該
保護無效的onCreate(捆綁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中調用了這個方法。我仍然收到控制器Wifi無法打開的調用堆棧消息,我越來越認爲這是該問題。
您是否在Android Manifest中定義了接收器? –
是的,我現在試着在清單中聲明接收器,但是沒有任何改變。我認爲唯一可能是錯誤的是Wifi可能沒有正確啓用,正如callstack所指出的那樣? –
什麼是您的測試設備的Android版本? –