1

GPS_PROVIDER を使用するとアプリケーションは正常に動作しますが、NETWORK_PROVIDER を使用するとアプリケーションが強制的に停止されました。なんで?私の権限は完全ではありませんか?? 私のコードを機能させることで私を助けてください、ありがとう

 public class My_location extends Activity implements LocationListener {
EditText ET1,ET2;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.my_location);

//  Log.i("onCreate_My_location", "begin");
    ET1=(EditText)this.findViewById(R.id.editText1);

    ET2=(EditText)this.findViewById(R.id.editText2);
    ET1.setText("1.0000");
    ET2.setText("1.0000");

LocationManager LM1=(LocationManager) getSystemService(Context.LOCATION_SERVICE);

LM1.requestLocationUpdates(LocationManager.NETWORK_PROVIDER,0,1,this);

    //Log.i("onCreate_my_location", "End");
}


@Override
public void onLocationChanged(Location L1) {
    // TODO Auto-generated method stub
    //Log.i("onLocationChanged",String.valueOf(L1.getLongitude()));
    //Log.i("onLocationChanged",String.valueOf(L1.getLatitude()));
    //Log.i("onLocationChanged",String.valueOf(L1.getAltitude()));
    ET1.setText("C.0000");
    ET2.setText("C.0000");
    ET1.setText(String.valueOf(L1.getLongitude()));
    ET2.setText(String.valueOf(L1.getLatitude()));

}

@Override
public void onProviderDisabled(String arg0) {
}

@Override
public void onProviderEnabled(String arg0) {
}

@Override
public void onStatusChanged(String arg0, int arg1, Bundle arg2) {
}
  }    
4

2 に答える 2

0

特定のプロバイダーを使用する代わりに、最適なプロバイダーを使用すると、現在地の精度が向上します

以下のコードを使用すると、最適なプロバイダーを自動的に選択して場所が表示されます。

LocationManager LM1=(LocationManager) getSystemService(Context.LOCATION_SERVICE);
Criteria criteria = new Criteria();
String provider=LM1.getBestProvider(criteria, true);
LM1.requestLocationUpdates(provider,0,1,this);

編集:

コードの前にネットワーク状態を確認できますrequestLocationUpdates

これでクラッシュを回避できると思います:

if(LM1.isProviderEnabled(LocationManager.NETWORK_PROVIDER))
 {
  LM1.requestLocationUpdates(LocationManager.NETWORK_PROVIDER,0,1,this);
 }
于 2013-07-13T14:38:25.977 に答える
0

ネットワーク ロケーション プロバイダーが有効になっているかどうかを確認します。

try {
    network_enabled = locManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
} catch(Exception ex) {
   ex.printStackTrace();
}

プロバイダーが有効になっている場合は、あなただけがそれを使用できます。また、ネットワーク プロバイダーを使用した位置更新の場合、minDistance の値を 1 に指定しても意味がないと思います。粗い位置はとにかくあまり正確ではありません。この値を 50 メートルまたは 100 メートルに変更することをお勧めします。

于 2013-07-13T17:55:51.497 に答える