मैं WifiManager.enableNetwork() को कॉल करते समय अपना कॉलिंग थ्रेड देशी कोड में लटक रहा हूं। अब तक, मैं केवल एंड्रॉइड 3.2.1 चलाने वाले मोटोरोला ज़ूम टैबलेट पर इस हैंग को पुन: उत्पन्न करने में सक्षम हूं। मैंने कई अन्य फोन और टैबलेट पर परीक्षण किया है (सभी फ्रायओ या जिंजरब्रेड चल रहे हैं) और समस्या को नहीं देखा है। एक्सूम एकमात्र दोहरी कोर डिवाइस है जिसे मुझे परीक्षण करना है (और मैंने इस मुद्दे को 2 अलग-अलग ज़ूम पर पुन: उत्पन्न किया है), इसलिए मुझे लगता है कि मैं वाईफाईमेनर के साथ इंटरफेसिंग करते समय कुछ बहुत सूक्ष्म एंड्रॉइड थ्रेडिंग आवश्यकताओं पर ठोकर खा रहा हूं। स्टैक ट्रेस जहाँ मेरे बुला धागा लटका हुआ है:WifiManager.enableNetwork पर थ्रेड लटका()
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
मेरा आवेदन, एक ज्ञात वाईफ़ाई पहुँच बिंदु से कनेक्ट कुछ परीक्षण करने के लिए प्रयास कर रहा है, तो डिवाइस अपने मूल पहुंच बिंदु से (पुन: कनेक्ट करता है, तो यह पहले से था जुड़े हुए)। कनेक्शन स्थापित करने से पहले, हमने पहले ही सत्यापित कर लिया है कि वाईफाई सक्षम है और हमने यह सत्यापित करने के लिए स्कैन किया है कि हमारा एक्सेस पॉइंट एसएसआईडी पाया गया है। कनेक्शन स्थापित करने के लिए इस कोड को एक AsyncTask में चल रहा है और कुछ इस तरह दिखता है:
...
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);
}
}
}
...
इस कोड को एंड्रॉयड जिंजरब्रेड खुला स्रोत कोड में वाईफ़ाई सेटिंग्स मेनू कोड पर आधारित था। क्या WifiManager.enableNetwork() को कॉल करने के बारे में कुछ भी है जो मुझे याद आ रही है? क्या इसे किसी विशेष धागे पर चलाना है? मैंने यह सुनिश्चित करने का प्रयास किया है कि यूआई थ्रेड पर सक्षम नेटवर्क() को कॉल किया जाता है (तर्क को प्रसारण रिसीवर पर ले जाकर)। यह थोड़ा सा मदद करने लग रहा था, लेकिन मैं अभी भी लटका पुन: पेश करने में सक्षम था। शायद यह हनीकॉम के लिए विशिष्ट है? अभी, ये 2 एक्सूम एकमात्र हनीकॉम डिवाइस हैं जो मैंने परीक्षण के लिए उपलब्ध कराए हैं, इसलिए वे मेरे पास एकमात्र डेटा-पॉइंट हैं।
जी
उस पर कोई भाग्य? एक ही मुद्दा मिला। बस कुछ जानकारी मिली जो शायद कनेक्ट करने के लिए नेटवर्क का उपयोग किया जाना चाहिए, लेकिन इसके लिए अभी तक कोई आधिकारिक एआईडीएल नहीं है, इसलिए आपको इसे हैक करना होगा :( – pprzemek
हां, मुझे बिल्कुल ऐसा करना पड़ा। मैंने छिपे हुए " "एपीआई (सिर्फ हनीकॉम और बाद में) और मुझे तब तक कोई समस्या नहीं हुई है। –
मैंने [बग रिपोर्ट] उठाया है (http://code.google.com/p/android/issues/detail?id=34070)। –