WifiManager.enableNetwork() öğesini çağırırken arama ipi yerel kodda bekliyorum görüyorum. Şimdiye kadar, bu sadece Android 3.2.1 çalıştıran Motorola Xoom tablet üzerinde asmak mümkün olmuştur. Diğer telefonlarda ve tabletlerde (hepsi Froyo veya Gingerbread kullanıyordum) test ettim ve problemi görmedim. Xoom, test etmem gereken tek çift çekirdekli cihazdır (ve ben sorunu 2 farklı Xoom'da yeniden ürettim), bu yüzden WifiManager'la arayüz oluştururken bazı çok ince Android iş parçacığı gereksinimleriyle uğraştığımı hissediyorum. Benim çağıran iş parçacığı asılı Yığın izleme: daha önce olsaydıKonu WifiManager.enableNetwork üzerinde asılı()
BinderProxy.transact(int, Parcel, Parcel, int) line: not available [native method]
IWifiManager$Stub$Proxy.enableNetwork(int, boolean) line: 513
WifiManager.enableNetwork(int, boolean) line: 587
başvurum bilinen bir WiFi erişim noktasına bağlamak bazı testler çalışırken, daha sonra (orjinal erişim noktasına cihazı yeniden bağlamak bağlıdır). Bağlantı kurulmadan önce, wifi'nin etkinleştirildiğini doğruladık ve erişim noktası SSID'nin bulunduğunu doğrulamak için bir tarama gerçekleştirdik. bağlantı kurmak için bu kod bir AsyncTask çalışan ve şöyle görünür olduğu:
...
private WifiManager mWifiManager;
private List<WifiConfiguration> mConfiguredNets = new ArrayList<WifiConfiguration>();
private Object mConnectMonitor = new Object();
private NetworkInfo.State mNetworkState = State.UNKNOWN;
private final BroadcastReceiver mConnectionStateReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context inContext, final Intent inIntent) {
final String action = inIntent.getAction();
if (WifiManager.NETWORK_STATE_CHANGED_ACTION.equals(action)) {
NetworkInfo ni =
(NetworkInfo)inIntent.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO);
State state = ni.getState();
if (state == State.CONNECTED) {
synchronized (mConnectMonitor) {
mNetworkState = state;
mConnectMonitor.notify();
}
}
}
}
};
public void runninInAsyncTask(Context activityContext, int networkID) {
mWifiManager = (WifiManager)activityContext.getSystemService(Context.WIFI_SERVICE);
// Register our broadcast receiver to get network state change events
IntentFilter ifilter = new IntentFilter();
ifilter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION);
activityContext.registerReceiver(mConnectionStateReceiver, ifilter);
// Get a list of our currently configured networks so we can re-enable
// them after connecting to the desired network
mConfiguredNets = mWifiManager.getConfiguredNetworks();
// Enable our network and disable all others
mWifiManager.enableNetwork(networkId, true);
// Start the reconnection process to connect to our desired network
synchronized (mConnectMonitor) {
mWifiManager.reconnect();
mConnectMonitor.wait(60000);
if (mNetworkState != State.CONNECTED) {
Log.e(TAG, "Problems connecting to desired network!");
}
else {
Log.e(TAG, "Successfully connected to desired network!");
}
}
// Re-enable all of our previously configured networks
for (WifiConfiguration wifiConfig : mConfiguredNets)
{
if (wifiConfig.status != Status.ENABLED) {
mWifiManager.enableNetwork(wifiConfig.networkId, false);
}
}
}
...
Bu kod Android Gingerbread açık kaynak kodunda Wifi ayarları menüsü koduna dayanmaktadır. Eksik olduğum WifiManager.enableNetwork() ile ilgili bir şey var mı? Belirli bir iş parçacığında çalıştırılmak zorunda mı? UI iş parçacığında enableNetwork() işlevinin çağrılmasını (mantığı yayın alıcısına taşıyarak) denemeyi denedim. Bu biraz yardımcı görünüyordu, ama hala asmak mümkün oldu. Belki bu Honeycomb'a özgü bir şey midir? Şu anda, bu 2 Xoom test için kullanabileceğim tek Honeycomb cihazlarıdır, bu yüzden sahip olduğum tek veri noktalarıdır.
G
Bu gerçekten 3. * (anlaşılan) özgü bir firmware konudur
Bunun üzerinde bir şans var mı? Aynı sorunu aldım. Sadece connectNetwork yerine bunun yerine kullanılması gereken bazı bilgiler bulundu, ancak bunun için henüz resmi bir AIDL yok, bu yüzden ona hacklemeniz gerekecek :( – pprzemek
Evet, tam olarak bunu yapmak zorundaydım. "API'ler (sadece Petek için ve daha sonra) ve o zamandan beri hiç sorunum olmadı. –
[bug report] (http://code.google.com/p/android/issues/detail?id=34070). –