2012-09-26 9 views
8

में रोमिंग बंद होने पर पता लगाने पर मैंने BroadcastReceiver बनाया जो CONNECTIVITY_CHANGE ईवेंट के लिए सुनता है। अभी के लिए, मैं बस Intent की कार्रवाई को प्रिंट करता हूं जो BroadcastReceiver और इसके अतिरिक्त को कॉल करता है। मैं यहां मनीला में हमारे कार्यालय में एक टेस्ट फोन का उपयोग कर रहा हूं और सिम कार्ड डेनमार्क से है। जब onReceive() शुरू हो जाती है, यह क्या LogCat में मुद्रित हो जाता है:एंड्रॉइड

action: android.net.conn.CONNECTIVITY_CHANGE 
key: extraInfo, value: data.tre.dk 
key: htcCurrentActiveNetwork, value: null 
key: networkInfo, value: null 
key: reason, value: roamingOn 
key: noConnectivity, value: null 
key: inetCondition, value: null 

मुझे पता है कि क्या reason का मूल्य है जब रोमिंग बंद हो जाता है की जरूरत है - का अनुमान लगाकर roamingOff हो सकता है, लेकिन मुझे नहीं पता कर सकते हैं निश्चित रूप से, जब तक मैं डेनमार्क नहीं जाता। ऐसा इसलिए है क्योंकि रोमिंग सेवा बंद होने पर मुझे एक कार्य करने की ज़रूरत है, और मैंने लॉगकैट से देखा कि CONNECTIVITY_CHANGE घटना रोमिंग मोड को टॉगल करने के अलावा अन्य कारणों से निकाल दी गई है। या रोमिंग बंद होने पर पता लगाने का एक बेहतर तरीका है?

प्रसारण रिसीवर के लिए कोड:

public void onReceive(Context context, Intent intent) { 
    Log.d(This.LOGTAG, "action: " + intent.getAction()); 
    Bundle extras = intent.getExtras(); 
    for (String key : extras.keySet()) { 
     Log.d(This.LOGTAG, "key: " + key + ", value: " + extras.getString(key)); 
    } 
} 

प्रकट प्रविष्टि:

Settings.Secure.getInt(getContentResolver(), Settings.Secure.DATA_ROAMING) 

यह:

<receiver android:name=".listener.RoamingListener"> 
    <intent-filter> 
     <action android:name="android.net.conn.CONNECTIVITY_CHANGE" /> 
    </intent-filter> 
</receiver> 

उत्तर

1

रोमिंग नेटवर्क रोमिंग और डेटा के बीच एक अंतर नहीं है।

आम तौर पर, नेटवर्क रोमिंग आपके टेलको को देश के बाहर होने पर तीसरे पक्ष के उपग्रहों के माध्यम से जाने की अनुमति दे रहा है ताकि आप उनकी सेवाओं से जुड़े रह सकें। यहां तक ​​कि यदि आपने पहले से ही अपने टेलको को बताया है कि आप नेटवर्क रोमिंग की सदस्यता लेना चाहते हैं, तो यह तब तक सक्रिय नहीं होगा जब तक आप वास्तव में तीसरे पक्ष के टेलको उपग्रहों के माध्यम से कनेक्ट करना शुरू नहीं करते हैं, और यह तब होता है जब आप वास्तव में देश से बाहर होते हैं।

डेटा रोमिंग आपके डिवाइस को नेटवर्क रोमिंग मोड में होने पर मोबाइल डेटा का उपभोग करने की इजाजत देता है/अस्वीकार कर रहा है। यह अधिक डिवाइस-निर्भर है और आप आसानी से फोन के सेटिंग ऐप में इसे चालू या बंद कर सकते हैं।

संक्षेप में, यदि आप नेटवर्क रोमिंग का पता लगाना चाहते हैं, तो TelephonyManager.isNetworkRoaming() का उपयोग करें। यदि आप यह जांचना चाहते हैं कि डेटा रोमिंग चालू या बंद है या नहीं, तो Settings.Secure.getInt(getContentResolver(), Settings.Secure.DATA_ROAMING) का उपयोग करें।

महत्वपूर्ण: मैंने व्यक्तिगत परिदृश्यों का व्यक्तिगत रूप से परीक्षण नहीं किया है और मुझे यकीन नहीं है कि isNetworkRoaming() क्या मूल्य लौटाएगा।

  1. आपने नेटवर्क रोमिंग चालू करने के लिए अपने घर के टेलको को नहीं बताया, लेकिन जब आप किसी अन्य देश पहुंचे तो फोन ने अन्य टेलको नेटवर्क का पता लगाना शुरू कर दिया।
  2. परिदृश्य 1 के बाद, आपका फोन आपको यह चुनने के लिए कहता है कि किस ज्ञात टेलको नेटवर्क से कनेक्ट होना है। आप एक चुनते हैं और फोन कनेक्ट करने का प्रयास करता है। मुझे नहीं पता कि isNetworkRoaming() का मूल्य यहां वापस आ जाएगा क्योंकि आपने पहले स्थान पर नेटवर्क रोमिंग की सदस्यता नहीं ली है।
0

आप बस घूम राज्य का पता लगाने के लिए इस लाइन का उपयोग कर सकते हरिणी किसी विशेष अनुमति या रिसीवर की आवश्यकता नहीं है।

Source

+0

मैंने 'TelephonyManager.isNetworkRoaming()' के परिणाम के साथ उस पंक्ति का नतीजा अभी लॉग किया है।मुझे पता चला कि 'सेटिंग्स.Secure.DATA_ROAMING' '0' (अर्थात्, डेटा रोमिंग बंद है) लौटा सकता है जबकि' isNetworkRoaming()' सत्य है। मुझे लगता है कि यह इसलिए है क्योंकि टेलको अभी भी नेटवर्क रोमिंग मोड में है लेकिन मैं अपने डिवाइस को मोबाइल इंटरनेट का उपयोग करने की इजाजत नहीं दे रहा हूं। वे अलग-अलग स्विच लगते हैं, और मैं नेटवर्क रोमिंग मोड के बाद हूं। –

+0

और आप क्या जानना चाहते हैं? मुझे लगता है कि 'TelephonyManager.isNetworkRoaming()' दिखाता है कि आप रोमिंग में हैं, और सेटिंग सेट करते हैं यदि आप – Jin35

+0

रोमिंग में इंटरनेट का उपयोग कर सकते हैं, तो मैं नेटवर्क रोमिंग मोड के बाद हूं क्योंकि मैं उपयोगकर्ता के अगले मासिक बिल को मापने की कोशिश कर रहा हूं-- और इसमें डेटा रोमिंग के माध्यम से भेजे गए/प्राप्त किए गए मोबाइल डेटा की मात्रा शामिल नहीं है। –