2012-03-03 2 views
0

Я пытаюсь получить уровень сигнала текущей ячейки, к которой я подключен. До сих пор я нашел этот пример:Проблемы с сохранением Сила сигнала текущей ячейки в android

http://www.android10.org/index.php/forums/44-maplocation/868-tutorialget-gsm-signal

Но это только, чтобы получить Тост, когда сигнал изменяется. Есть ли способ сохранить значение силы сигнала в переменной?

Я пробовал это со следующим кодом, сохраняя значение переменной и получая его, но я продолжаю получать «начальное значение». Вот код:

package org.mode.gsm; 

import android.app.Activity; 
import android.content.Context; 
import android.os.Bundle; 
import android.telephony.PhoneStateListener; 
import android.telephony.SignalStrength; 
import android.telephony.TelephonyManager; 
import android.widget.TextView; 
import android.widget.Toast; 

public class GetGsmSignalStrength extends Activity { 

    TelephonyManager Tel; 
    MyPhoneStateListener MyListener; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     TextView abcd = new TextView(this); 
     abcd.setText(getRSSI()); 
     setContentView(abcd); 
    } 

    public String getRSSI() { 
     MyListener = new MyPhoneStateListener(); 
     Context context = (Context) getApplicationContext(); 
     Tel = (TelephonyManager) context 
       .getSystemService(Context.TELEPHONY_SERVICE); 
     Tel.listen(MyListener, PhoneStateListener.LISTEN_SIGNAL_STRENGTHS); 
     String GSMCinr = "GSM CINR = " + MyListener.getCinr(); 
     return GSMCinr; 
    } 

    private class MyPhoneStateListener extends PhoneStateListener { 

     String cinr = "initial value"; 

     @Override 
     public void onSignalStrengthsChanged(SignalStrength signalStrength) { 
      super.onSignalStrengthsChanged(signalStrength); 
      cinr = String.valueOf(signalStrength.getGsmSignalStrength()); 
      Toast.makeText(
        getApplicationContext(), 
        "GSM Cinr = " 
          + String.valueOf(signalStrength 
           .getGsmSignalStrength()), Toast.LENGTH_LONG) 
        .show(); 
     } 

     public String getCinr() { 
      return cinr; 
     } 
    } 
} 

И манифест:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="org.mode.gsm" 
    android:versionCode="1" 
    android:versionName="1.0" > 

    <uses-sdk android:minSdkVersion="7" /> 

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

    <application 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" > 
     <activity 
      android:label="@string/app_name" 
      android:name=".GetGsmSignalStrength" > 
      <intent-filter > 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
    </application> 

</manifest> 

Я был бы очень признателен, если кто-то может мне помочь сохранить значение силы сигнала, или предложить какой-либо другой способ сделать это .. .

Благодаря

+0

Где вы хотите сохранить уровень сигнала? Файл на SD-карте, сети, локальной базе данных? – qdot

+0

во-первых, я просто хочу сохранить его в переменной, которую я буду класть в базу данных позже, но это не проблема ... Я просто хочу, чтобы иметь возможность получить ее из моего класса GetGsmSignalStrength – modellero

ответ

1
GetRssi listener = new GetRssi(); 
protected int Rssi; 
Rssi = 99; 

private class GetRssi extends PhoneStateListener 
{ 
    @Override 
    public void onSignalStrengthsChanged(SignalStrength signalStrength) 
    { 
     super.onSignalStrengthsChanged(signalStrength); 
     Rssi = signalStrength.getGsmSignalStrength(); 
    } 
    } 

RSSI был объявлен в interger; Таким образом, после того, как вы можете создать функцию (String), которые возвращают «» + RSSI, как этот

public String getRssi(){ 
     return ""+Rssi; 
} 

Вы должны преобразовать значение в дБм. Надеюсь, что поможет !!!

Смежные вопросы