0

私のアプリケーションは、GPS の更新を 1 秒に 1 回取得します。また、Wifi 接続の RSSI 値を 1 秒に 1 回取得します。私が直面している問題は、BroadcastReceiver が呼び出されないことです。誰かが私が間違っていることを指摘できますか。多くのスタックオーバーフローの質問や他のサイトを見ましたが、何が間違っているのかわかりません。私のコードは以下の通りです:

final String locAction = "com.android.ping.STARTGPS";
PendingIntent pIntent;

@Override
public void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    Intent intent = new Intent(locAction);
    locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
    isGPSEnabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);

    if (!isGPSEnabled) {
        Log.i(TAG,"PING: GPS not enabled");
    } else {
        Log.i(TAG,"PING: GPS enabled");
        pIntent = PendingIntent.getBroadcast(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
        locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, MIN_time_BW_Updates, MIN_Distance_Change_For_Updates, pIntent);
        registerReceiver(myWifiReceiver, new IntentFilter(locAction));
        Log.i(TAG,"PING: adding GPS status listener");
    }
}

ブロードキャストレシーバー:

protected BroadcastReceiver myWifiReceiver = new BroadcastReceiver() 
{
    @Override
    public void onReceive(Context context, Intent intent){
        Log.i(TAG, "PING: inside onReceive");
        if (intent.getAction().equals(locAction)){
            String locationKey = LocationManager.KEY_LOCATION_CHANGED;
            Location location = (Location) intent.getExtras().get(locationKey);
            Log.i(TAG, "PING: location is " + location.getLatitude() + ", " + location.getLongitude());
            setLocation(location.getLatitude(), location.getLongitude());

            try {
                WifiInfo(); //Calls the function that gets the RSSI
            } catch (IOException e) {
                e.printStackTrace();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
};

インテントはここで登録解除されます:

@Override
protected void onStop() {
    super.onStop();
    locationManager.removeUpdates(pIntent);
    unregisterReceiver(myWifiReceiver);
}

BroadcastReceiverを登録する私のマニフェストファイル:

<receiver android:name="PingActivity" >
        <intent-filter>
            <action android:name="com.android.ping.STARTGPS" />
        </intent-filter>
</receiver>

編集 1: アプリに IP アドレスを (今のところ) ハードコーディングし、2 つの異なるデバイスに展開することも追加する必要があります。IP アドレスに応じて、デバイスはサーバー スレッドまたはクライアント スレッドのいずれかを開始します。コードのこの部分は、broadcastReceiver を登録した直後に続きます

4

1 に答える 1

1

broadcast名前を使用してマニフェストでa を宣言しPingActivity、実装クラスが呼び出されることに注意してください。myWifiReceiver名前を PingActivity に変更し、ブロードキャストを別のクラスにする必要があります。

于 2013-10-08T19:44:09.337 に答える