2013-05-10 10 views
5

私はこれに関して別の質問があることを知っていますが、私はGSM(isGSM()がtrueを返す)を使用していると確信しているので、私には当てはまりません。いずれにせよ、getCdmaDbmは-1と答えてくれます。getGSMSignalStrength()常に返されます99

MainActivity:

package com.example.receptionlookup; 

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

public class MainActivity extends Activity { 

    TelephonyManager  Tel; 
    MyPhoneStateListener MyListener; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     /* Update the listener, and start it */ 
     MyListener = new MyPhoneStateListener(); 
     Tel  = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE); 
     Tel.listen(MyListener ,PhoneStateListener.LISTEN_SIGNAL_STRENGTHS); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.activity_main, menu); 
     return true; 
    } 

    /* Called when the application is minimized */ 
    @Override 
    protected void onPause() 
    { 
     super.onPause(); 
     Tel.listen(MyListener, PhoneStateListener.LISTEN_NONE); 
    } 

    /* Called when the application resumes */ 
    @Override 
    protected void onResume() 
    { 
     super.onResume(); 
     Tel.listen(MyListener,PhoneStateListener.LISTEN_SIGNAL_STRENGTHS); 
    } 

    /* —————————– */ 
    /* Start the PhoneState listener */ 
    /* —————————– */ 
    private class MyPhoneStateListener extends PhoneStateListener 
    { 
     /* Get the Signal strength from the provider, each tiome there is an update */ 
     @Override 
     public void onSignalStrengthsChanged(SignalStrength signalStrength) 
     { 
      super.onSignalStrengthsChanged(signalStrength); 
      Toast.makeText(getApplicationContext(), "Go to Firstdroid!!! GSM Cinr = " 
        + String.valueOf(signalStrength.getGsmSignalStrength()), Toast.LENGTH_SHORT).show(); 
     } 

    };/* End of private Class */ 

} 

AndroidManifest:

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

    <uses-sdk 
     android:minSdkVersion="8" 
     android:targetSdkVersion="17" /> 

    <application 
     android:allowBackup="true" 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" 
     android:theme="@style/AppTheme" > 
     <activity 
      android:name="com.example.receptionlookup.MainActivity" 
      android:label="@string/app_name" > 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
    </application> 
    <uses-permission android:name="android.permission.READ_PHONE_STATE" /> 
    <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/> 
</manifest> 

ん私は、Android 4.1.1とここHTCワンXを使用していますと、(私ではありませんほとんどが)私のコードです誰が問題が何であるか知っていますか?私がSettings-> About-> Networkに行くと、そこで信号の強さを見ることができます。この値を読み取る方法はありませんか?私はいくつかのサードパーティのアプリを試してみましたが、いずれも自分の信号強度を読み取ることができません。私は独自のgetGSMSignalBar()メソッドも試しましたが、NoSuchMethodExceptionを取得しました。

+0

だから、本当に方法はありませんか? –

+0

使用できる代替方法はありますか? –

+0

他のデバイスでコードを試しましたか?または単にHTC One X? – Nate

答えて

0

の実装は、信号強度を与えると仮定したコマンドです(オプション)。3GPP 127 007 8.5で読むことができます。どうやらHTCはサードパーティのアプリケーションからこの価値を隠しており、おそらく独自の設定アプリケーションで表示するためにその価値を達成する別の方法を持っているはずです。

他のアプリケーションもその情報を取得できないという事実が私の場合を正当化します。

This issueはあなたと密接に関連しています--thayは、HTCはモデムに関連する開発時間に値するものではないOEMの1つだと言いました。

+0

質問はどうですか? –

+0

あなたがこれを行うことができない限り、htcとネイティブライブラリで実装されているモデムベンダーとの間には、「libsec-ril」というプライベート通信があります。 Googleとオープンソースではない。 – Bush

0

これを試してみてください:私は私の携帯電話上のプログラムで信号強度を見てのために

Class signalStrengthClass = signalStrength.getClass(); 
      try { 
       Method method = signalStrengthClass.getMethod(
         "getGsmSignalBar", null); 
       method.setAccessible(true); 
       Integer bars = (Integer) method.invoke(signalStrength, 
         (Object[]) null); 
       } 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
+0

私はこれに対してNoSuchMethodExceptionを取得します。 –

+0

あなたが 'getMethod(...)を' getDeclaredMethod() 'に置き換えたらどうでしょうか? – Bush

+0

同じ結果が残念です。私はその方法がGalaxy S2で動作することを知っています。多分それはHTCのための方法ではないでしょう。 –

関連する問題