2010-10-11 22 views
5

मेरे एंड्रॉइड एप्लिकेशन में मैं सभी उपलब्ध एपीएन प्राप्त करना चाहता हूं और जांच सकता हूं कि क्लाइंट एपीएन उपलब्ध है या नहीं। मैं इस क्लाइंट एपीएन का उपयोग करके अपना ऐप चलाने के लिए चाहता हूं।Android पर एपीएन प्रोग्रामेटिक रूप से सेट करें

क्या एंड्रॉइड पर इसे हासिल करने का कोई तरीका है?

उत्तर

4

यह आपके प्रश्न का सीधे उत्तर नहीं दे सकता है। this पर एक नज़र डालें। हालांकि ध्यान रखें कि यह कोड संदर्भ के लिए केवल है और आपके ऐप में इसका उपयोग नहीं किया जाना चाहिए।

परिभाषित करने के लिए मिलता APN:

Cursor c = getContentResolver().query(Uri.withAppendedPath(Telephony.Carriers.CONTENT_URI, "current"), null, null, null, null); 

और फिर प्रासंगिक कॉलम के लिए Telephony.Carriers को देखें।

+0

हां मैं अपने अनुप्रयोग में इस का उपयोग कर की कोशिश की है और यह इस त्रुटि फेंकता है: 'java.lang.SecurityException: एपीएन सेटिंग्स लिखने की कोई अनुमति नहीं: न तो उपयोगकर्ता 100 99 और न ही वर्तमान प्रक्रिया में android.permission.WRITE_APN_SETTINGS.' – toobsco42

+0

आवश्यक अनुमति जोड़ें (http://developer.android.com/reference/android/Manifest.permission.html#WRITE_APN_S ETTINGS) मेनिफेस्ट – Asahi

+0

पर जब मैंने इसे मैनिफेस्ट में जोड़ने का प्रयास किया तो उसने कहा कि केवल मूल ऐप्स ही इस अनुमति को जोड़ सकते हैं। – toobsco42

3

यदि आप एंड्रॉइड 4.2 के लिए एपीएन पढ़ना चाहते हैं और अधिक वे करने के लिए एक बदलाव हैं। मैंने इसका परीक्षण किया, और यह काम करता है।

Android 4.1 में और उपयोग इस से ऊपर:

Cursor c = getContentResolver().query(Uri.withAppendedPath(Telephony.Carriers.CONTENT_URI, "current"), null, null, null, null); 

और Android 4.2 के लिए और अधिक इस कोड का उपयोग:

private static final String[] APN_PROJECTION = { 
    Telephony.Carriers.TYPE,   // 0 
    Telephony.Carriers.MMSC,   // 1 
    Telephony.Carriers.MMSPROXY,  // 2 
    Telephony.Carriers.MMSPORT   // 3 
}; 

और इस लाइन:

final Cursor apnCursor =SqliteWrapper.query(context, this.context.getContentResolver(), Uri.withAppendedPath(Carriers.CONTENT_URI, "current"), APN_PROJECTION, null, null, null); 

SQLiteWrapperClass है छुपा (मुझे इंटरनेट पर यह कक्षा मिली)।

import android.database.sqlite.SqliteWrapper; 
+0

हैलो vincent091, वाहक.कंटिफुरि? –

+0

कक्षा सी = कक्षा .forName ("android.database.sqlite.SqliteWrapper"); c.name = null में परिणाम। ऐसा लगता है कि यह विधि काम नहीं करती है। – Pawel

0

आप अनुमति की आवश्यकता होगी:

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

कोड:

private void addApn(Intent intent) { 
     final String apn = intent.getStringExtra(APN_EXTRA_APN); 
     final String name = intent.getStringExtra(APN_EXTRA_NAME); 
     final String type = intent.getStringExtra(APN_EXTRA_TYPE); 
     final String proxy = intent.getStringExtra(APN_EXTRA_PROXY); 
     final int mnc = intent.getIntExtra(APN_EXTRA_MNC, 6); 
     final int mcc = intent.getIntExtra(APN_EXTRA_MCC, 724); 
     final String user = intent.getStringExtra(APN_EXTRA_USER); 
     final String password = intent.getStringExtra(APN_EXTRA_PASSWORD); 
     final String server = intent.getStringExtra(APN_EXTRA_SERVER); 

     final ContentResolver cr = mContext.getContentResolver(); 
     ContentValues values = new ContentValues(); 
     values.put(Telephony.Carriers.APN, apn); 
     values.put(Telephony.Carriers.NAME, name); 
     values.put(Telephony.Carriers.TYPE, type); 
     values.put(Telephony.Carriers.PROXY, proxy); 
     values.put(Telephony.Carriers.MNC, mnc); 
     values.put(Telephony.Carriers.MCC, mcc); 
     values.put(Telephony.Carriers.USER, user); 
     values.put(Telephony.Carriers.PASSWORD, password); 
     values.put(Telephony.Carriers.SERVER, server); 
     cr.insert(Telephony.Carriers.CONTENT_URI, values); 
    } 
संबंधित मुद्दे