Android のバックグラウンドでは、SD カードの抜き差しを監視する MountService や、クリップボード機能を提供する ClipboardService など、システム起動時に SystemServer によって起動され、システムの正常な動作をサポートするサービスが多数存在します。 PackageManagerService は、ソフトウェア パッケージのインストールと削除を提供し、アプリケーションはシステムが提供する Manager インターフェイスを介して、これらのサービスが提供するデータにアクセスできます。
getSystemService是Android很重要的一个API,它是Activity的一个方法,根据传入的NAME来取得对应的Object,然后转换成相应的服务对象。以下介绍系统相应的服务。
传入的Name | 返回的对象 | 说明
WINDOW_SERVICE WindowManager 管理打开的窗口程序
LAYOUT_INFLATER_SERVICE LayoutInflater 取得xml里定义的view
ACTIVITY_SERVICE ActivityManager 管理应用程序的系统状态
POWER_SERVICE PowerManger 电源的服务
ALARM_SERVICE AlarmManager 闹钟的服务
NOTIFICATION_SERVICE NotificationManager 状态栏的服务
KEYGUARD_SERVICE KeyguardManager 键盘锁的服务
LOCATION_SERVICE LocationManager 位置的服务,如GPS
SEARCH_SERVICE SearchManager 搜索的服务
VEBRATOR_SERVICE Vebrator 手机震动的服务
CONNECTIVITY_SERVICE Connectivity 网络连接的服务
WIFI_SERVICE WifiManager Wi-Fi服务
TELEPHONY_SERVICE TeleponyManager 电话服务
例:
このコードは、Android が携帯電話情報を取得するときに使用されます。
public class BasicInfo {
public String getPhoneNumber()
{
// 获取手机号 MSISDN,很可能为空
TelephonyManager tm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
StringBuffer inf = new StringBuffer();
switch(tm.getSimState()){ //getSimState()取得sim的状态 有下面6中状态
case TelephonyManager.SIM_STATE_ABSENT :inf.append("无卡");return inf.toString();
case TelephonyManager.SIM_STATE_UNKNOWN :inf.append("未知状态");return inf.toString();
case TelephonyManager.SIM_STATE_NETWORK_LOCKED :inf.append("需要NetworkPIN解锁");return inf.toString();
case TelephonyManager.SIM_STATE_PIN_REQUIRED :inf.append("需要PIN解锁");return inf.toString();
case TelephonyManager.SIM_STATE_PUK_REQUIRED :inf.append("需要PUK解锁");return inf.toString();
case TelephonyManager.SIM_STATE_READY :break;
}
String phoneNumber = tm.getLine1Number();
return phoneNumber;
}
別のアクティビティ クラスで呼び出される場合、プロセスは常にシャットダウンし、電話情報を取得できません。後でわかったこと
getSystemService メソッドはコンテキストに基づいており、このメソッドは TextView コントロールが存在するフォームでのみアクティブになります~
それから:
パラメーター Context を持つコンストラクターを BasicInfo に追加します。
public BasicInfo (Context context) { this.context = context; }
getPhoneNumber() 関数を次のように変更します。
context.getSystemService(Context.TELEPHONY_SERVIC);
呼び出し側クラス BasicInfo bi = new BasicInfo(this);
bi.getPhoneNumber();