2012-03-02 2 views
1

현재 신호 강도를 저장하는 앱을 만들려고합니다. 지금까지 나는 모든 PhoneStateListener을 확장하고 많은 예제를 본 적이 있지만 그들 모두는이 예에서와 같이,이 정보를 표시하기 위해 토스트를 사용android의 신호 강도가 변수로 저장되었습니다.

http://www.firstdroid.com/2010/05/12/get-provider-gsm-signal-strength/

나는 몇 가지 궁금 :

a) 항상 PhoneStateListener를 사용해야하고 onSignalStrengthsChanged (SignalStrength 신호 강도)를 재정의해야합니까?

b) PhoneStateListener 클래스 외부에서 signalStrength.getGsmSignalStrength() 값에 어떻게 액세스합니까?

미리 감사드립니다.

답변

0

U 시도해 볼 수 있습니다. 나는 그것의 최종 솔루션을 말할 수 없습니다. 다른 활동에서 특정 데이터에 액세스하려는 경우 공유 환경 설정으로 시도하십시오. 공유 된 환경 설정 값은 다른 활동에서 볼 수 있습니다.

0

질문에 대한 답변이 늦어 질 수도 있지만, 여전히 대답을 찾고 있습니다. 여기에 있습니다 :

) 예) GSM에 대한 현재 셀의 신호 강도를 얻는 유일한 방법 인 내 지식으로는 PhoneStateListener를 사용하고 onSignalStrengthsChanged를 재정의해야합니다. 리스너는 신호 강도가 큰 경우에만 호출되므로 사용자는 리스너를 제어 할 수 없습니다. 리스너는 호출 될 때 자동으로 업데이트하거나 축배를 보냅니다. 따라서 리스너를 선언하고 onCreate()에서 수신 대기하도록 요청하는 것이 좋습니다.

b) 리스너 외부에서 RSSI 값에 액세스하는 것은 실제로 어렵지 않습니다. 변수에 값을 저장하고 getRSSI()와 같은 메소드를 작성하십시오.이 메소드는 getRSSI()와 같은 메소드를 호출하여 호출 될 때 값을 리턴합니다. 예는 다음과 같습니다.

public class GsmRSSI extends Activity{ 
    MyPhoneStateListener MyListener; 
    TelephonyManager Tel; 
    ArrayList<String> signalStrength = new ArrayList<String>(); 

    protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    MyListener = new MyPhoneStateListener(); 
    Tel = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE); 
    Tel.listen(MyListener, PhoneStateListener.LISTEN_SIGNAL_STRENGTHS); 

    timer.schedule(new TimerTask() { 
     public void run() { 
      String rssi = MyListener.getStrength(); 
          if(!rssi.equals("")) 
           signalStrength.add(rssi); 
     } 
    }, 0, 5000);//it will add the rssi value after every 5000ms 
    } 


     private class MyPhoneStateListener extends PhoneStateListener { 
    String gsmStrength = ""; 

    @Override 
    public void onSignalStrengthsChanged(SignalStrength signalStrength) { 
     super.onSignalStrengthsChanged(signalStrength); 
     gsmStrength = String.valueOf(signalStrength.getGsmSignalStrength()* 2 - 113);   
    } 

    public String getStrength() { 
     return gsmStrength; 
    } 

    } 
    } 

이 작업이 필요합니다. 그러나 처음에는 rssi에 중요한 변화가있을 때만 청취자가 호출되기 때문에 조금만 rssi 값을 얻지 못할 수도 있습니다.