From fea911d5359f1eb42ff8b9c70cd6f51500f539d4 Mon Sep 17 00:00:00 2001 From: Anirudh Dewani Date: Wed, 22 Jun 2011 17:56:30 +0530 Subject: [PATCH] Network detection sample using TelephonyManager Change-Id: Iaa5b66a2eda07fd9de4ea613209226dd4ee64abd Conflicts: samples/ApiDemos/AndroidManifest.xml --- samples/ApiDemos/AndroidManifest.xml | 13 ++ samples/ApiDemos/_index.html | 1 + .../ApiDemos/res/layout/network_detector.xml | 19 ++ .../apis/telephony/NetworkDetector.java | 221 ++++++++++++++++++ 4 files changed, 254 insertions(+) create mode 100644 samples/ApiDemos/res/layout/network_detector.xml create mode 100644 samples/ApiDemos/src/com/example/android/apis/telephony/NetworkDetector.java diff --git a/samples/ApiDemos/AndroidManifest.xml b/samples/ApiDemos/AndroidManifest.xml index 9199c1664..97399c325 100644 --- a/samples/ApiDemos/AndroidManifest.xml +++ b/samples/ApiDemos/AndroidManifest.xml @@ -36,6 +36,8 @@ + + + + + + + + + + + + diff --git a/samples/ApiDemos/_index.html b/samples/ApiDemos/_index.html index 399ef8669..a80930adb 100644 --- a/samples/ApiDemos/_index.html +++ b/samples/ApiDemos/_index.html @@ -36,6 +36,7 @@ document.write(""+ "
  • Graphics
  • "+ "
  • Media
  • "+ "
  • OS
  • "+ +"
  • Telephony
  • "+ "
  • Text
  • "+ "
  • Views
  • "); diff --git a/samples/ApiDemos/res/layout/network_detector.xml b/samples/ApiDemos/res/layout/network_detector.xml new file mode 100644 index 000000000..cd43b5076 --- /dev/null +++ b/samples/ApiDemos/res/layout/network_detector.xml @@ -0,0 +1,19 @@ + + + + + + + diff --git a/samples/ApiDemos/src/com/example/android/apis/telephony/NetworkDetector.java b/samples/ApiDemos/src/com/example/android/apis/telephony/NetworkDetector.java new file mode 100644 index 000000000..80da6c328 --- /dev/null +++ b/samples/ApiDemos/src/com/example/android/apis/telephony/NetworkDetector.java @@ -0,0 +1,221 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.example.android.apis.telephony; + +import android.app.Activity; +import android.os.Bundle; +import android.telephony.PhoneStateListener; +import android.telephony.ServiceState; +import android.telephony.TelephonyManager; +import android.widget.TextView; + +// Need the following import to get access to the app resources, since this +// class is in a sub-package. +import com.example.android.apis.R; + +/** + * Activity that uses {@link android.telephony.TelephonyManager} to obtain + * telephony parameters like network state, phone type and SIM state. + */ +public class NetworkDetector extends Activity { + + /* + * SIM state constants + */ + public static final String SIM_ABSENT = "Absent"; + public static final String SIM_READY = "Ready"; + public static final String SIM_PIN_REQUIRED = "PIN required"; + public static final String SIM_PUK_REQUIRED = "PUK required"; + public static final String SIM_NETWORK_LOCKED = "Network locked"; + public static final String SIM_UNKNOWN = "Unknown"; + + /* + * Network type constants + */ + public static final String NETWORK_CDMA = "CDMA: Either IS95A or IS95B (2G)"; + public static final String NETWORK_EDGE = "EDGE (2.75G)"; + public static final String NETWORK_GPRS = "GPRS (2.5G)"; + public static final String NETWORK_UMTS = "UMTS (3G)"; + public static final String NETWORK_EVDO_0 = "EVDO revision 0 (3G)"; + public static final String NETWORK_EVDO_A = "EVDO revision A (3G - Transitional)"; + public static final String NETWORK_EVDO_B = "EVDO revision B (3G - Transitional)"; + public static final String NETWORK_1X_RTT = "1xRTT (2G - Transitional)"; + public static final String NETWORK_HSDPA = "HSDPA (3G - Transitional)"; + public static final String NETWORK_HSUPA = "HSUPA (3G - Transitional)"; + public static final String NETWORK_HSPA = "HSPA (3G - Transitional)"; + public static final String NETWORK_IDEN = "iDen (2G)"; + public static final String NETWORK_LTE = "LTE (4G)"; + public static final String NETWORK_EHRPD = "EHRPD (3G)"; + public static final String NETWORK_HSPAP = "HSPAP (3G)"; + public static final String NETWORK_UNKOWN = "Unknown"; + + /* + * Phone type constants + */ + public static final String PHONE_CDMA = "CDMA"; + public static final String PHONE_GSM = "GSM"; + public static final String PHONE_SIP = "SIP"; + public static final String PHONE_NONE = "No radio"; + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.network_detector); + + // Get the telephony system service to find out network details + final TelephonyManager tm = (TelephonyManager) getSystemService(TELEPHONY_SERVICE); + + // Update text views with readable values. + updateViews(tm); + + // Since these attributes can change, we will register a + // {@code PhoneStateListener} to listen for these changes and + // update the view. + tm.listen(new PhoneStateListener() { + @Override + public void onServiceStateChanged(ServiceState serviceState) { + // Update our TextViews + updateViews(tm); + } + + @Override + public void onDataConnectionStateChanged(int state) { + // A change in data connection state may be due to availability + // of a different network type + updateViews(tm); + } + + }, PhoneStateListener.LISTEN_SERVICE_STATE + | PhoneStateListener.LISTEN_DATA_CONNECTION_STATE); + } + + @Override + protected void onResume() { + super.onResume(); + final TelephonyManager tm = (TelephonyManager) getSystemService(TELEPHONY_SERVICE); + + // Update text views with readable values. + updateViews(tm); + } + + /** + * Update text views with telephony attributes. + */ + private final void updateViews(TelephonyManager tm) { + + // The telephony system service returns integer constants for various + // telephony attributes. + TextView view = null; + + view = (TextView) findViewById(R.id.sim_state); + view.setText("SIM State: " + mapSimStateToName(tm.getSimState())); + + view = (TextView) findViewById(R.id.network_type); + view.setText("Network Type: " + mapNetworkTypeToName(tm.getNetworkType())); + + view = (TextView) findViewById(R.id.phone_type); + view.setText("Phone Type: " + mapDeviceTypeToName(tm.getPhoneType())); + + view = (TextView) findViewById(R.id.network_name); + view.setText("Network Operator: " + tm.getNetworkOperatorName()); + } + + /** + * Returns a string describing the current SIM state. + */ + private static String mapSimStateToName(int simState) { + switch (simState) { + case TelephonyManager.SIM_STATE_ABSENT: + return SIM_ABSENT; + case TelephonyManager.SIM_STATE_READY: + return SIM_READY; + case TelephonyManager.SIM_STATE_PIN_REQUIRED: + return SIM_PIN_REQUIRED; + case TelephonyManager.SIM_STATE_PUK_REQUIRED: + return SIM_PUK_REQUIRED; + case TelephonyManager.SIM_STATE_NETWORK_LOCKED: + return SIM_NETWORK_LOCKED; + case TelephonyManager.SIM_STATE_UNKNOWN: + return SIM_UNKNOWN; + default: + // shouldn't happen. + return null; + } + } + + /** + * Returns a string indicating the phone radio type. + */ + private static String mapDeviceTypeToName(int device) { + + switch (device) { + case TelephonyManager.PHONE_TYPE_CDMA: + return PHONE_CDMA; + case TelephonyManager.PHONE_TYPE_GSM: + return PHONE_GSM; + case TelephonyManager.PHONE_TYPE_SIP: + return PHONE_SIP; + case TelephonyManager.PHONE_TYPE_NONE: + return PHONE_NONE; + default: + // shouldn't happen. + return null; + } + } + + /** + * Returns a string describing the network type. + */ + public static String mapNetworkTypeToName(int networkType) { + + switch (networkType) { + case TelephonyManager.NETWORK_TYPE_CDMA: + return NETWORK_CDMA; + case TelephonyManager.NETWORK_TYPE_EDGE: + return NETWORK_EDGE; + case TelephonyManager.NETWORK_TYPE_GPRS: + return NETWORK_EDGE; + case TelephonyManager.NETWORK_TYPE_UMTS: + return NETWORK_UMTS; + case TelephonyManager.NETWORK_TYPE_EVDO_0: + return NETWORK_EVDO_0; + case TelephonyManager.NETWORK_TYPE_EVDO_A: + return NETWORK_EVDO_A; + case TelephonyManager.NETWORK_TYPE_EVDO_B: + return NETWORK_EVDO_B; + case TelephonyManager.NETWORK_TYPE_1xRTT: + return NETWORK_1X_RTT; + case TelephonyManager.NETWORK_TYPE_HSDPA: + return NETWORK_HSDPA; + case TelephonyManager.NETWORK_TYPE_HSPA: + return NETWORK_HSPA; + case TelephonyManager.NETWORK_TYPE_HSUPA: + return NETWORK_HSUPA; + case TelephonyManager.NETWORK_TYPE_IDEN: + return NETWORK_IDEN; + case TelephonyManager.NETWORK_TYPE_LTE: + return NETWORK_LTE; + case TelephonyManager.NETWORK_TYPE_EHRPD: + return NETWORK_EHRPD; + case TelephonyManager.NETWORK_TYPE_HSPAP: + return NETWORK_HSPAP; + case TelephonyManager.NETWORK_TYPE_UNKNOWN: + default: + return NETWORK_UNKOWN; + } + } +}