2011-12-22 17 views
5

यह सैमसंग गैलेक्सी नेक्सस की Verizon LTE संस्करण के लिए है।Android 4.0 4 जी टॉगल

मुझे एक छोटा ऐप लिखने के लिए काम सौंपा गया है जो 4 जी क्षमता को प्रभावी ढंग से अक्षम/सक्षम करेगा। यह settings > mobile network > network mode के माध्यम से मैन्युअल रूप से किया जा सकता है और LTE/CDMA (4 जी सक्षम) या CDMA (केवल 3 जी) चुनकर।

मैंने अभी तक कुछ प्रयास नहीं किया है क्योंकि Android विकास मेरी मजबूत सूट नहीं है। मैं मार्गदर्शन की तलाश कर रहा हूं ... उदाहरण, कोड नमूने इत्यादि। मुझे लगता है कि यह लगभग एक-लाइनर होना चाहिए, लेकिन यह मेरा अनुभव रहा है कि एंड्रॉइड विकास के साथ ऐसा कुछ भी आसान नहीं है जैसा दिखता है।

किसी भी मदद की सराहना की जाएगी।

+0

AFAIK, साधारण Android SDK अनुप्रयोगों में नहीं बदल सकते। – CommonsWare

+0

आह, बहुत दिलचस्प है। मुझे आशा है कि यह मामला नहीं है। अब शोध मैंने सुना है कि एचटीसी फोन के लिए एक विजेट मौजूद है, जो मुझे विश्वास दिलाता है * * किया जा सकता है। –

+1

यदि एचटीसी फोन के साथ सवाल जहाज में ऐप विजेट है, तो यह सामान्य एंड्रॉइड एसडीके एप्लीकेशन नहीं है। – CommonsWare

उत्तर

-1

http://developer.android.com/reference/android/provider/Settings.System.html

अपने Activity.java में कोड लिखने के अलावा, आप शायद AndroidManifest.xml में इन सेटिंग्स का उपयोग करने की अनुमति के लिए पूछने करना होगा। तो यह कष्टप्रद है लेकिन काफी सरल होना चाहिए।

+0

अब देख रहे हैं। धन्यवाद! –

5

Settings.Secure कक्षा में एक प्राथमिकता है कि एसडीके से छिपा हुआ है नहीं है:

/** 
    * The preferred network mode 7 = Global 
    *        6 = EvDo only 
    *        5 = CDMA w/o EvDo 
    *        4 = CDMA/EvDo auto 
    *        3 = GSM/WCDMA auto 
    *        2 = WCDMA only 
    *        1 = GSM only 
    *        0 = GSM/WCDMA preferred 
    * @hide 
    */ 
    public static final String PREFERRED_NETWORK_MODE = 
      "preferred_network_mode"; 

आप इस पर प्रतिबिंब इस्तेमाल कर सकते हैं या सिर्फ अपनी परियोजना के लिए निरंतर स्थानीय बनाना। इस के साथ समस्या यह है कि यदि आप इस सेटिंग का मान नहीं बदल सकते हैं (सभी सुरक्षित सेटिंग्स के साथ के रूप में), आप केवल इसे पढ़ सकते हैं। उपर्युक्त मूल्य केवल एकमात्र संभावित नहीं हैं, वास्तव में com.android.internal.telephony.RILConstants में कुछ और स्थित हैं, जो फिर से एसडीके से छिपा हुआ है और प्रतिबिंब के लिए प्रतिबिंब की आवश्यकता होगी।

वहाँ TelephonyManager में एक और छिपा तरीका है, लेकिन फिर इसे पढ़ा है केवल इस निरंतर स्थापित करने के लिए कोई अन्य तरीका है। यह आपको बता होगा कि वास्तव में क्या आप को पता है, डिवाइस के लिए "LTE/CDMA" (LTE_ON_CDMA_TRUE) सेट कर दिया जाता है या "केवल सीडीएमए" चाहते हैं (LTE_ON_CDMA_FALSE):

/** 
* Return if the current radio is LTE on CDMA. This 
* is a tri-state return value as for a period of time 
* the mode may be unknown. 
* 
* @return {@link Phone#LTE_ON_CDMA_UNKNOWN}, {@link Phone#LTE_ON_CDMA_FALSE} 
* or {@link Phone#LTE_ON_CDMA_TRUE} 
* 
* @hide 
*/ 
public int getLteOnCdmaMode() { 
    try { 
     return getITelephony().getLteOnCdmaMode(); 
    } catch (RemoteException ex) { 
     // Assume no ICC card if remote exception which shouldn't happen 
     return Phone.LTE_ON_CDMA_UNKNOWN; 
    } catch (NullPointerException ex) { 
     // This could happen before phone restarts due to crashing 
     return Phone.LTE_ON_CDMA_UNKNOWN; 
    } 
} 
अपना शोध से

आप एक ऐसी नहीं कर सके रूट पहुँच बिना आवेदन और setprop कमांड लाइन से की तरह कुछ का उपयोग कर, लेकिन फिर भी आप इस सेटिंग को प्रभावी करने के लिए आदेश में पूरे टेलीफोनी प्रक्रिया पुनः आरंभ करने की आवश्यकता हो सकती।

अंत में, यदि आप अभी भी रुचि रखते हैं com.android.phone.Settings यह देखने के लिए कि सिस्टम इस टॉगल को कैसे संभालता है। यह काफी विस्तृत है, और जैसा कि मैंने उल्लेख किया है कि अनुमतियों की आवश्यकता होगी कि एक सामान्य एंड्रॉइड एप्लिकेशन नहीं दिया जाएगा।

2

मैं भी सेटिंग्स WCDMA-केवल, WCDMA/LTE बदलने में रुचि रखते हूँ, ...

मैं जिस तरह से Settings.secure। बदलने के लिए मूल विशेषाधिकार के साथ * के रूप में नीचे दिखाया गया है पाया।

new ExecuteAsRootBase() { 
     @Override 
     protected ArrayList<String> getCommandsToExecute() { 
      ArrayList<String> cmds = new ArrayList<String>(); 
      cmds.add("su -c 'chmod 755 "+mySqlite+"'"); 
      cmds.add("echo \"UPDATE secure SET value='"+ value +"' WHERE name='"+ key +"'; \" | "+mySqlite+" /data/data/com.android.providers.settings/databases/settings.db"); 
      //TODO: SQL injection can be done!!! 
      return cmds; 
     } 
    }.execute(); 

ExecuteAsRootBase here शुरू की है, और mySqlite "/data/data/"+context.getPackageName()+"/files/sqlite3" जहां sqlite3 अग्रिम में डाल दिया जाता है।

हालांकि, ऐसा लगता है कि हमें com.android.internal.telephony.Phone को कॉल करना होगा। setPreferredNetworkType() स्विचिंग के लिए (WCDMA केवल < => WCDMA/LTE) सेटिंग्स.secure.PREFERRED_NETWORK_MODE सेट करने के बाद। मेरा फोन (सेटिंग भी सेट करें। सुरक्षित।PREFERRED_NETWORK_MODE = 2) एलटीई नेटवर्क से जुड़ा हुआ है ...

+0

क्या आपने कभी यह काम किया है? यह आशाजनक लग रहा है – BriCo84

1

अन्य सभी उत्तरों सही हैं कि इसे सेटिंग्स तक पहुंच की आवश्यकता है। सुरक्षित। पर कैसे फोन एप्लिकेशन को इस की स्थापना https://github.com/dzo/packages_apps_phone/blob/master/src/com/android/phone/Use2GOnlyCheckBoxPreference.java

संभालती एक नजर डालें या Toggle2G एप्लिकेशन स्रोत पर एक नज़र डालें: https://github.com/TheMasterBaron/Toggle-2G