getSystemService()の詳細説明

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 コントロールが存在するフォームでのみアクティブになります~

それから:

  1. パラメーター Context を持つコンストラクターを BasicInfo に追加します。

    public BasicInfo (Context context)
    
    {
    
    this.context = context;
    
    }
    
  2. getPhoneNumber() 関数を次のように変更します。

    context.getSystemService(Context.TELEPHONY_SERVIC);
    
  3. 呼び出し側クラス BasicInfo bi = new BasicInfo(this);

    bi.getPhoneNumber();
    

おすすめ

転載: blog.csdn.net/lb687/article/details/76566845