दिलचस्प पोस्ट
एंड्रॉइड में कस्टम रेडियो बटन जोड़ना एक्लिप्स में ब्रेडक्रंब को अक्षम कैसे करें एंड्रॉइड 5.0 एंड्रॉइड: एउलेशन वर्क्स फॉर व्यू, लेकिन नॉट बटन? पासवर्ड में 1 अपरकेस अक्षर, 1 विशेष वर्ण, अल्फ़ान्यूमेरिक वर्ण सहित 8 वर्ण होने चाहिए अतिव्यापी घटनाओं के साथ स्ट्रिंग गणना जावा में toString विधि का उपयोग कैसे करें? WPF एक ऑब्जेक्ट के गुणों के लिए बाइंडिंग क्यों करता है, लेकिन फ़ील्ड नहीं? PyQt: एक पृष्ठभूमि ऑपरेशन शुरू करने के लिए एक स्लॉट में एक संकेत कनेक्ट थ्रेड से यूआई अपडेट करें प्रदर्शन परीक्षण को दोहराने के लिए फ़ाइल कैश साफ़ करें यूनिक्स युग का समय जावा दिनांक वस्तु के लिए लिनक्स में डेमॉन बनाना मैं एक स्ट्रिंग कैसे विभाजित करूं, ताकि मैं आइटम x एक्सेस कर सकूं? गैर यादृच्छिक संख्या दोहरा कैसे प्रोग्रामिंग आईफोन पर एसएमएस भेजें?

वाई-फाई के बजाय एंड्रॉइड एप्लिकेशन में 3 जी कनेक्शन का उपयोग कैसे करें?

वाई-फाई के बजाय एंड्रॉइड एप्लिकेशन में 3 जी कनेक्शन का उपयोग कैसे करें?

मैं एक 3 जी कनेक्शन कनेक्ट करना चाहता हूं, क्या वाई-फाई के बजाय 3G से कनेक्ट करने के लिए कोई नमूना कोड है?

वेब के समाधान से एकत्रित समाधान "वाई-फाई के बजाय एंड्रॉइड एप्लिकेशन में 3 जी कनेक्शन का उपयोग कैसे करें?"

टी-मोबाइल 'मेरा खाता' ऐप ऐसा करता है, यदि आप वाईफाई कनेक्शन से जुड़े होते हैं तो यह आपको बताता है कि उनका प्रोग्राम वाईफ़ाई पर काम नहीं करेगा और फिर उपयोगकर्ता से पूछता है कि क्या वे वाईफाई कनेक्शन बंद करना चाहते हैं। अगर आप " नहीं ", तब एप्लिकेशन से बाहर निकलता है, यदि आप" हां "चुनते हैं, तो ऐप आपके वाईफाई कनेक्शन को बंद कर देता है और फिर शुरू करने के साथ जारी रहता है

मुझे लगता है कि इसका पालन करने के लिए एक अच्छा मॉडल है, यह सुनिश्चित करेगा कि आपका ऐप WiFi पर नहीं चल रहा है और उपयोगकर्ता को यह तय करने की अनुमति देता है कि क्या वे वाईफ़ाई को बंद करना चाहते हैं या नहीं इस मॉडल पर एक सुधार वाईफ़ाई को वापस करने के लिए होगा जब उपयोगकर्ता आपके एप से दूर हो जाएंगे।

मैंने निम्नलिखित कोड का परीक्षण नहीं किया है, लेकिन ऐसा लगता है कि यह काम करना चाहिए ( यहां से संशोधित)

अपने मेनिफेस्ट में निम्नलिखित अनुमतियों का उपयोग करें

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

और यहाँ वाईफ़ाई चालू / बंद करने के लिए कुछ वास्तविक कोड है

 private WifiManager wifiManager; @Override public void onCreate(Bundle icicle) { .................... wifiManager = (WifiManager) this.getSystemService(Context.WIFI_SERVICE); if(wifiManager.isWifiEnabled()) { wifiManager.setWifiEnabled(false); } else { wifiManager.setWifiEnabled(true); } } 

यदि आप उस मार्ग के नीचे नहीं जाना चाहते हैं तो ऐसा लगता है कि आप फ़ोन को बता सकते हैं कि आप वाईफ़ाई नेटवर्क की बजाय मोबाइल डेटा नेटवर्क का उपयोग करना पसंद करेंगे।

एंड्रॉइड कनेक्टिविटी प्रबंधक एक फ़ंक्शन सेटनेटवर्कप्रेफर प्रदान करता है। यह फ़ंक्शन वास्तव में प्रलेखित नहीं है जैसा कि आप बता सकते हैं कि क्या आप लिंक पर क्लिक करते हैं मैं इसके साथ भलीभांति करूँगा क्योंकि यद्यपि स्थिरांक जो परिभाषित हैं, आपको लगता है कि आप इसे या तो TYPE_MOBILE या TYPE_WIFI पर सेट कर सकते हैं और एक DEFAULT_NETWORK_PREFERENCE निरंतर भी है जो 0x00000001 के रूप में परिभाषित किया गया है जो कि TYPE_WIFI के समान है इसलिए कॉल करने से कनेक्टिविटी प्रबंधक की पहुंच प्राप्त करने का प्रयास करें

 Context.getSystemService(Context.CONNECTIVITY_SERVICE); 

और फिर setNetworkPreference () फ़ंक्शन का उपयोग करने का प्रयास करें।

यह मैनिफेस्ट में किसी भी अनुमति की आवश्यकता नहीं होती है, लेकिन इसमें उन पंक्तियों के साथ CHANGE_NETWORK_STATE अनुमति या कुछ की आवश्यकता हो सकती है

यदि आप setNetworkPreference फ़ंक्शन पर मुकदमा करते हैं, तो शायद नेटवर्क प्राथमिकता वापस अपने मूल मानों (GetNetworkPreference से प्राप्त) करने के लिए भी सबसे अच्छा होगा

आशा है कि ये आपकी मदद करेगा।

 /** * Enable mobile connection for a specific address * @param context a Context (application or activity) * @param address the address to enable * @return true for success, else false */ private boolean forceMobileConnectionForAddress(Context context, String address) { ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); if (null == connectivityManager) { Log.debug(TAG_LOG, "ConnectivityManager is null, cannot try to force a mobile connection"); return false; } //check if mobile connection is available and connected State state = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE_HIPRI).getState(); Log.debug(TAG_LOG, "TYPE_MOBILE_HIPRI network state: " + state); if (0 == state.compareTo(State.CONNECTED) || 0 == state.compareTo(State.CONNECTING)) { return true; } //activate mobile connection in addition to other connection already activated int resultInt = connectivityManager.startUsingNetworkFeature(ConnectivityManager.TYPE_MOBILE, "enableHIPRI"); Log.debug(TAG_LOG, "startUsingNetworkFeature for enableHIPRI result: " + resultInt); //-1 means errors // 0 means already enabled // 1 means enabled // other values can be returned, because this method is vendor specific if (-1 == resultInt) { Log.error(TAG_LOG, "Wrong result of startUsingNetworkFeature, maybe problems"); return false; } if (0 == resultInt) { Log.debug(TAG_LOG, "No need to perform additional network settings"); return true; } //find the host name to route String hostName = StringUtil.extractAddressFromUrl(address); Log.debug(TAG_LOG, "Source address: " + address); Log.debug(TAG_LOG, "Destination host address to route: " + hostName); if (TextUtils.isEmpty(hostName)) hostName = address; //create a route for the specified address int hostAddress = lookupHost(hostName); if (-1 == hostAddress) { Log.error(TAG_LOG, "Wrong host address transformation, result was -1"); return false; } //wait some time needed to connection manager for waking up try { for (int counter=0; counter<30; counter++) { State checkState = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE_HIPRI).getState(); if (0 == checkState.compareTo(State.CONNECTED)) break; Thread.sleep(1000); } } catch (InterruptedException e) { //nothing to do } boolean resultBool = connectivityManager.requestRouteToHost(ConnectivityManager.TYPE_MOBILE_HIPRI, hostAddress); Log.debug(TAG_LOG, "requestRouteToHost result: " + resultBool); if (!resultBool) Log.error(TAG_LOG, "Wrong requestRouteToHost result: expected true, but was false"); return resultBool; } 

और यह मेजबान पते की गणना के लिए:

 /** * This method extracts from address the hostname * @param url eg. http://some.where.com:8080/sync * @return some.where.com */ public static String extractAddressFromUrl(String url) { String urlToProcess = null; //find protocol int protocolEndIndex = url.indexOf("://"); if(protocolEndIndex>0) { urlToProcess = url.substring(protocolEndIndex + 3); } else { urlToProcess = url; } // If we have port number in the address we strip everything // after the port number int pos = urlToProcess.indexOf(':'); if (pos >= 0) { urlToProcess = urlToProcess.substring(0, pos); } // If we have resource location in the address then we strip // everything after the '/' pos = urlToProcess.indexOf('/'); if (pos >= 0) { urlToProcess = urlToProcess.substring(0, pos); } // If we have ? in the address then we strip // everything after the '?' pos = urlToProcess.indexOf('?'); if (pos >= 0) { urlToProcess = urlToProcess.substring(0, pos); } return urlToProcess; } /** * Transform host name in int value used by {@link ConnectivityManager.requestRouteToHost} * method * * @param hostname * @return -1 if the host doesn't exists, elsewhere its translation * to an integer */ private static int lookupHost(String hostname) { InetAddress inetAddress; try { inetAddress = InetAddress.getByName(hostname); } catch (UnknownHostException e) { return -1; } byte[] addrBytes; int addr; addrBytes = inetAddress.getAddress(); addr = ((addrBytes[3] & 0xff) << 24) | ((addrBytes[2] & 0xff) << 16) | ((addrBytes[1] & 0xff) << 8 ) | (addrBytes[0] & 0xff); return addr; } 

और AndroidManifest.xml में निम्नलिखित अनुमतियां शामिल की जानी चाहिए

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

यह एंड्रॉइड 2.2 और इसके बाद के संस्करण के साथ काम करता है, जो नेक्सस वन और एलजी ऑप्टिमस दोनों पर परीक्षण किया गया है, अन्य फोन मुझे नहीं पता क्योंकि कनेक्टिविटी मैनेजर की कुछ विधि विक्रेता-विशिष्ट है 15-20 सेकंड की निष्क्रियता के बाद, मोबाइल नेटवर्क स्वतः डिस्कनेक्ट हो गया है।

मुझे लगता है कि जावा से संभव नहीं है एक वायरलेस नेटवर्क से कनेक्ट होने पर सिस्टम सभी मोबाइल नेटवर्क आधारित संचार को बंद कर देता है। मुझे लगता है कि आपको कार्यक्रम से 3 जी कनेक्शन शुरू करने की अनुमति नहीं है।

यह कोड है जो API 21+ (लॉलीपॉप, मार्शमोलो ..) पर काम करता है। मैं ओकेएचटीपी नेटवर्क .getSocketFactory () के साथ प्रयोग करना पसंद करता हूं, लेकिन Network.openURLConnection () भी ठीक काम करता है।

 private void doTest() { display("Requesting CELLULAR network connectivity..."); ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE); NetworkRequest request = new NetworkRequest.Builder() .addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR) .addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET).build(); connectivityManager.requestNetwork(request, new ConnectivityManager.NetworkCallback() { /** * Called when the framework connects and has declared a new network ready for use. * This callback may be called more than once if the {@link Network} that is * satisfying the request changes. * * This method will be called on non-UI thread, so beware not to use any UI updates directly. * * @param network The {@link Network} of the satisfying network. */ @Override public void onAvailable(final Network network) { display("Got available network: " + network.toString()); try { final InetAddress address = network.getByName("navalclash.com"); display("Resolved host2ip: " + address.getHostName() + " -> " + address.getHostAddress()); } catch (UnknownHostException e) { e.printStackTrace(); } display("Do request test page from remote http server..."); if(okHttpClient == null) { okHttpClient = new OkHttpClient.Builder().socketFactory(network.getSocketFactory()).build(); } Request request = new Request.Builder() .url("http://navalclash.com") .build(); try (Response response = okHttpClient.newCall(request).execute()) { display("RESULT:\n" + response.body().string()); } catch (Exception ex) { ex.printStackTrace(); } } }); } 

कनेक्शन प्रबंधक का उपयोग करें और नेटवर्क वरीयता सेट करें जैसे आप चाहें। आपका भाग्य अच्छा रहे

पूर्व के लिए: dataManager = (कनेक्टिविटी प्रबंधक) getSystemService (CONNECTIVITY_SERVICE); dataManager.setNetworkPreference (ConnectivityManager.TYPE_MOBILE);

यह आवेदन 3G और वाईफाई कनेक्शन को सक्रिय करता है, 3G को प्राथमिकता देता है !! बहुत उपयोगी http://www.redrails.com.br/2012/02/wireless-analyzer-for-android/

इस टिकट में कोड से प्रेरित होकर इसके कुछ हिस्सों का उपयोग करके, यहां सेवा है जो हैिपरी मोबाइल स्थापित करती है और इसे चलती रहती है।

 import java.net.InetAddress; import java.net.UnknownHostException; import java.util.concurrent.atomic.AtomicBoolean; import android.app.Service; import android.content.Context; import android.content.Intent; import android.net.ConnectivityManager; import android.net.NetworkInfo.State; import android.os.IBinder; import android.util.Log; public class HipriService extends Service { private AtomicBoolean enabledMobile = new AtomicBoolean(false); public boolean enableMobileConnection() { ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); if (null == cm) { Log.d(TAG, "ConnectivityManager is null, cannot try to force a mobile connection"); return false; } /* * Don't do anything if we are connecting. On the other hands re-new * connection if we are connected. */ State state = cm.getNetworkInfo(ConnectivityManager.TYPE_MOBILE_HIPRI).getState(); Log.d(TAG, "TYPE_MOBILE_HIPRI network state: " + state); if (0 == state.compareTo(State.CONNECTING)) return true; /* * Re-activate mobile connection in addition to other connection already * activated */ int resultInt = cm.startUsingNetworkFeature(ConnectivityManager.TYPE_MOBILE, "enableHIPRI"); //Log.d(TAG, "startUsingNetworkFeature for enableHIPRI result: " + resultInt); //-1 means errors // 0 means already enabled // 1 means enabled // other values can be returned, because this method is vendor specific if (-1 == resultInt) { Log.e(TAG, "Wrong result of startUsingNetworkFeature, maybe problems"); return false; } if (0 == resultInt) { Log.d(TAG, "No need to perform additional network settings"); return true; } return requestRouteToHost(this, Uploader.ServerAddress); } private Thread pingerThread = null; private void startMobileConnection() { enabledMobile.set(true); pingerThread = new Thread(new Runnable() { @Override public void run() { while (enabledMobile.get()) { /* * Renew mobile connection. No routing setup is needed. This * should be moved to 3g monitoring service one day. */ enableMobileConnection(); try { Thread.sleep(1000); } catch (InterruptedException e) { // do nothing } } } }); pingerThread.start(); } private void stopMobileConnection() { enabledMobile.set(false); disableMobileConnection(); pingerThread.interrupt(); pingerThread = null; } public void disableMobileConnection() { ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); cm.stopUsingNetworkFeature(ConnectivityManager.TYPE_MOBILE, "enableHIPRI"); } public final static int inetAddressToInt(InetAddress inetAddress) { byte[] addrBytes; int addr; addrBytes = inetAddress.getAddress(); addr = ((addrBytes[3] & 0xff) << 24) | ((addrBytes[2] & 0xff) << 16) | ((addrBytes[1] & 0xff) << 8) | (addrBytes[0] & 0xff); return addr; } public final static InetAddress lookupHost(String hostname) { try { return InetAddress.getByName(hostname); } catch (UnknownHostException e) { return null; } } private boolean requestRouteToHost(Context context, String hostname) { ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); if (null == cm) { Log.d(TAG, "ConnectivityManager is null, cannot try to force a mobile connection"); return false; } /* Wait some time needed to connection manager for waking up */ try { for (int counter = 0; enabledMobile.get() && counter < 30; counter++) { State checkState = cm.getNetworkInfo(ConnectivityManager.TYPE_MOBILE_HIPRI).getState(); Log.i(TAG, "Waiting for mobile data on. State " + checkState); if (0 == checkState.compareTo(State.CONNECTED)) break; Thread.sleep(1000); } } catch (InterruptedException e) { //nothing to do } if (!enabledMobile.get()) { Log.d(TAG, "Mobile data is turned off while waiting for routing."); return false; } State checkState = cm.getNetworkInfo(ConnectivityManager.TYPE_MOBILE_HIPRI).getState(); if (0 != checkState.compareTo(State.CONNECTED)) { Log.e(TAG, "Mobile data is still turned off after 30 sec of waiting."); return false; } Log.i(TAG, "Adding routing for " + hostname); InetAddress inetAddress = lookupHost(hostname); if (inetAddress == null) { Log.e(TAG, "Failed to resolve " + hostname); return false; } int hostAddress = inetAddressToInt(inetAddress); boolean resultBool = cm.requestRouteToHost(ConnectivityManager.TYPE_MOBILE_HIPRI, hostAddress); Log.d(TAG, "requestRouteToHost result: " + resultBool); if (!resultBool) Log.e(TAG, "Wrong requestRouteToHost result: expected true, but was false"); return resultBool; } @Override public void onCreate() { super.onCreate(); startMobileConnection(); } @Override public void onDestroy() { stopMobileConnection(); super.onDestroy(); } @Override public IBinder onBind(Intent intent) { return null; } } 

यहां बताया गया है कि जब जरूरत पड़ती है तो मैं इसे शुरू / बंद कर देता हूं। ध्यान दें कि यह सीपीयू और वाईफाई पर भी ताला लगाता है ताकि फोन सोता हो (स्क्रीन केवल) जब यह चल सके। वाईफाई की आवश्यकता है क्योंकि मेरा ऐप वाईफ़ाई और मोबाइल कनेक्शन के बीच का पुल है। आपको इसकी आवश्यकता नहीं हो सकती है

 public void startMobileData() { if (!enabledMobile.get()) { enabledMobile.set(true); WifiManager wm = (WifiManager) getSystemService(Context.WIFI_SERVICE); wifiLock = wm.createWifiLock(WifiManager.WIFI_MODE_FULL, "Wifi Wakelock"); wifiLock.acquire(); PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE); partialLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "3G Wakelock"); partialLock.acquire(); startService(new Intent(this, HipriService.class)); } } public void stopMobileData() { if (enabledMobile.get()) { enabledMobile.set(false); Log.i(TAG, "Disabled mobile data"); stopService(new Intent(this, HipriService.class)); if (partialLock != null) { partialLock.release(); partialLock = null; } if (wifiLock != null) { wifiLock.release(); wifiLock = null; } } } 

आपको मेनिफेस्ट फ़ाइल में सेवा जोड़ने के लिए मत भूलना

@umka

  • मुझे लगता है, एप केवल एचआईपीआरआई द्वारा उन होस्टों तक पहुंच सकता है, जिसने यह अनुरोध किया है, अन्य होस्टों के लिए हो सकता है (जिनके मार्ग का अनुरोध नहीं किया गया है) डिफ़ॉल्ट नेटवर्क (मोबाइल या वाईफ़ाई) का उपयोग कर रहा है।
  • StopUsingNetworkFeature () पर कॉल करने पर, यह जांच करेगा – क्या कोई अन्य ऐप इस नेटवर्क का उपयोग कर रहा है, यदि हां, तो यह आपके नेटवर्क सुविधा को नीचे करने के लिए आपके अनुरोध को अनदेखा करेगा।
  • एचआईपीआरआई नेटवर्क का मुख्य उद्देश्य यह है कि – यदि वाईफाई चालू है और एक एप मोबाइल नेटवर्क्स (3 जी) का उपयोग विशेष मेजबान तक पहुंचने के लिए करता है, तो वह एचआईपीआरआई नेटवर्क तक पहुंच सकता है।