ユーザーが一定時間 (たとえば 5 分間) 受信状態が低い (ネットワーク信号が低い) 場所にいる状況を検出したいのですが、どの値を使用すればよいか悩んでいます。
私が今持っているものは次のとおりです。
public class RadiationTest {
TelephonyManager TelephonManager;
SignalStrengthListener signallistener;
private Context context;
public RadiationTest(Context context) {
this.context = context;
try {
signallistener = new SignalStrengthListener();
TelephonManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
TelephonManager.listen(signallistener, PhoneStateListener.LISTEN_SIGNAL_STRENGTHS);
} catch (Exception ex) {
ex.printStackTrace();
}
}
class SignalStrengthListener extends PhoneStateListener {
@Override
public void onSignalStrengthsChanged(android.telephony.SignalStrength signalStrength) {
super.onSignalStrengthsChanged(signalStrength);
int SignalStrength_ASU = signalStrength.getGsmSignalStrength();
int SignalStrength_dBm = (2 * SignalStrength_ASU) - 113; // -> dBm
// here I can use dbm
// I can also get the bars with signalStrength.getLevel()
}
}
}
dbm 値を見ると、ほとんどの場合85のように見えますが、これは良好な受信を意味し、受信の低い場所に行くと負の値になります。この回答から、dbm の負の値は受信が低いことを意味することがわかりましたが、負ではなく、デバイスが非常に敏感であることを意味します。(答えの表を参照してください)。
また、dbm の値はデバイスによって異なるようです。
を見ると、signalStrength.getLevel()
受付バーがいくつあるかがわかります。これは良い選択肢のようです。
そのことを念頭に置いて、は多くの値を持つクラスであり、低信号を一定時間テストし、人々がこれを経験しているかどうかを確認するSignalStrength
ための最も信頼できる方法は何だろうと思っていました.