Androidでネットワーク接続を監視しようとしています。これはメイン スレッドでは実行できないため、データ収集は私が生成した別のスレッドで行われます。また、Handler クラスを使用して毎秒 UI に報告することを学んでいます。これが私のコードの関連スニペットです...
public class MainActivity extends Activity {
private TextView textView;
private int linkSpeed;
Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
Message message = msg;
textView.setText(message);
setContentView(textView);
}
};
/** Called when the activity is created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
textView = new TextView(this);
textView.setTextSize(25);
Thread thread = new Thread() {
public void run() {
for (;;) {
try {
WifiManager wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);
while (true)
{
WifiInfo wifiInfo = wifiManager.getConnectionInfo();
if (wifiInfo != null) {
linkSpeed = wifiInfo.getLinkSpeed(); //measured using WifiInfo.LINK_SPEED_UNITS
}
else {
linkSpeed = -1;
}
}
String message = "linkSpeed = " + linkSpeed;
handler.handleMessage(message);
Thread.sleep(1000);
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
};
thread.start();
}
問題は、生成した新しいスレッドから取得するメッセージが「文字列」型であるということですが、Handler クラスの handleMessage メソッドをオーバーロードして、メッセージの代わりに文字列を受け取ることができないようです。String を返す Message クラスの唯一のメソッドは toString() メソッドであるため、String と Message の間に直接的な変換があるとは思いませんが、メッセージに含まれるものではなく、説明を返します。また、文字列をメッセージに変換する方法についても混乱しています。非常に遠回りのアプローチをしているように感じます。どんな助けでも大歓迎です!