2010-06-26 86 views
4

我試圖在我的Activity中獲得ServiceState的實例。但我該怎麼做呢?在任何返回實例的服務上沒有獲得實例或任何方法的靜態方法。
有調用TelephonyManager.listen()。但是我想在需要時獲取ServiceState實例,而不是在Android調用我的偵聽器時發生更改。如何獲取ServiceState的實例?

ServiceState的文檔可以在這裏找到:http://developer.android.com/reference/android/telephony/ServiceState.html

+0

你想實現什麼?你想觀察哪種服務?網絡連接? – Janusz 2010-09-07 13:44:32

回答

3

我想我沒有真正理解你的問題,因爲據我所知,自從API級別1以來,在ServiceState上有一個空的構造函數,它是公共的。所以,如果你想它的一個實例,所有你需要做的是:

ServiceState serviceState = new ServiceState(); 

編輯: 現在,我理解你的處境,我能想到的唯一的事情就是在您註冊一個PhoneStateListener你將在PhoneState上得到更新(它可能沒有真正改變,但事件被觸發,讓你知道我猜的當前值)。所以我能想到的唯一解決方法是在想要知道當前值並在不再需要時取消註冊它時繼續註冊phoneStateListener。

希望幫助

+1

根據文檔,這只是一個空的構造函數。這意味着它使用默認值初始化ServiceState的實例。不是當前值。 – Goddchen 2011-04-02 10:45:52

+0

在實際嘗試實現它之後,我瞭解了你的情況,我認爲如果在這個默認實例上調用了getState()方法,它會得到實際的狀態,但這似乎並不那麼...我會編輯我的回答 – Rick 2011-04-05 10:52:06

+0

這只是一個假設,還是您真的嘗試/驗證您的解決方法? – Goddchen 2012-04-07 12:02:45

1

一些調用不適用於開發人員。期。

如果你想要那種信息,你將有一個PhoneStateListener像這樣example

+0

是的,這正是我所描述的和我不想做的;)當我的Activity啓動時,我需要檢查ServiceState。 – Goddchen 2010-06-28 11:01:14

+0

您將不得不考慮使用「PhoneStateListener」的解決方法。 – Macarse 2010-06-28 13:33:22

+0

我將不得不改變一些東西,比如激活飛行模式或類似的東西。但我不想改變用戶不希望我改變的東西... – Goddchen 2010-06-28 14:49:58

3

我還沒有嘗試過這個,但我將不得不因爲這種功能是我的應用程序的關鍵。我要讓你知道如何去,但這裏的想法:

從API(的TelephonyManager實例方法):

public void listen (PhoneStateListener listener, int events)

註冊一個偵聽器對象接收變化的通知,指定的電話狀態。

要註冊偵聽器,請傳遞PhoneStateListener,並在events參數中指定至少一個感興趣的電話狀態。 在註冊時,當指定的電話狀態改變時,電話管理器將在偵聽器對象上調用適當的回調方法,並傳遞當前(udpated)的值。

你可以只註冊一個監聽器,並保持它,然後獲取回調在每次更改保存在您的活動報告狀態,使您的應用程序可能只是指活動現場每一個需要檢查的時間。或者,您可以在每次希望進行狀態測量時都繼續註冊並丟棄聽衆,但我認爲這會浪費更多的系統資源,而不是隻保留一個。

6

你想從ServiceState得到什麼樣的信息? 如果您只想獲得當前註冊的運營商,您可以通過撥打TelephonyManager中的方法getNetworkOperatorName()來完成此操作。 但是,如果您想要獲得電話的服務狀態,則需要使用覆蓋的onServiceStateChanged方法實施PhoneStateListener。當你調用telephonyManager.listen

telephonyManager.listen(yourListener, PhoneStateListener.LISTEN_SERVICE_STATE); 

,然後onServiceStateChanged方法被調用,你在這個時候得到手機當前的服務狀態:然後使這個。

1

使用本:

private PhoneStateListener mPhoneListener = new PhoneStateListener() { 
    @Override 
    public void onServiceStateChanged(ServiceState serviceState) { 
     Log.d(TAG, "Phone State: " + serviceState.getState()); 
     phone_state = serviceState.getState(); 
     super.onServiceStateChanged(serviceState); 
    } 
}; 

,並在OnCreate:

TelephonyManager tm = (TelephonyManager) getSystemService(TELEPHONY_SERVICE); 
tm.listen(mPhoneListener, PhoneStateListener.LISTEN_SERVICE_STATE); 
0

在Android中8,你有以下幾種:

tm = (TelephonyManager) getSystemService(TELEPHONY_SERVICE); 
tm.getServiceState(); 

不要忘了添加權限:

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