0

私は緯度と経度を取得しようとしていますが、テキストボックスにネットワークアドレスとGPSアドレスの両方が必要であることを示したいので、これを行いましたしかし、一度に1つのアドレスしか取得できません

public class GetLocationMainActivity extends Activity {

double nlat;
double nlng;
double glat;
double glng;

LocationManager glocManager;
LocationListener glocListener;
LocationManager nlocManager;
LocationListener nlocListener;

TextView textViewNetLat;
TextView textViewNetLng;
TextView textViewGpsLat;
TextView textViewGpsLng;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_get_location_main);

    //All textView
    textViewNetLat = (TextView)findViewById(R.id.textViewNetLat);
    textViewNetLng = (TextView)findViewById(R.id.textViewNetLng);
    textViewGpsLat = (TextView)findViewById(R.id.textViewGpsLat);
    textViewGpsLng = (TextView)findViewById(R.id.textViewGpsLng);
}

@Override
public void onDestroy() {

    //Remove GPS location update
    if(glocManager != null){
        glocManager.removeUpdates(glocListener);
        Log.d("ServiceForLatLng", "GPS Update Released");
    }

    //Remove Network location update
    if(nlocManager != null){
        nlocManager.removeUpdates(nlocListener);
        Log.d("ServiceForLatLng", "Network Update Released");
    }
    super.onDestroy();
}

//This is for Lat lng which is determine by your wireless or mobile network
public class MyLocationListenerNetWork implements LocationListener  
{
    @Override
    public void onLocationChanged(Location loc)
    {
        nlat = loc.getLatitude();
        nlng = loc.getLongitude();

        //Setting the Network Lat, Lng into the textView
        textViewNetLat.setText("Network Latitude:  " + nlat);
        textViewNetLng.setText("Network Longitude:  " + nlng);

        Log.d("LAT & LNG Network:", nlat + " " + nlng);
    }

    @Override
    public void onProviderDisabled(String provider)
    {
        Log.d("LOG", "Network is OFF!");
    }
    @Override
    public void onProviderEnabled(String provider)
    {
        Log.d("LOG", "Thanks for enabling Network !");
    }
    @Override
    public void onStatusChanged(String provider, int status, Bundle extras)
    {
    }
}

public class MyLocationListenerGPS implements LocationListener  
{
    @Override
    public void onLocationChanged(Location loc)
    {
        glat = loc.getLatitude();
        glng = loc.getLongitude();

        //Setting the GPS Lat, Lng into the textView
        textViewGpsLat.setText("GPS Latitude:  " + glat);
        textViewGpsLng.setText("GPS Longitude:  " + glng);

        Log.d("LAT & LNG GPS:", glat + " " + glng);
    }

    @Override
    public void onProviderDisabled(String provider)
    {
        Log.d("LOG", "GPS is OFF!");
    }
    @Override
    public void onProviderEnabled(String provider)
    {
        Log.d("LOG", "Thanks for enabling GPS !");
    }

    @Override
    public void onStatusChanged(String provider, int status, Bundle extras)
    {
    }
}

public void showLoc(View v) {

    //Location access ON or OFF checking
    ContentResolver contentResolver = getBaseContext().getContentResolver();
    boolean gpsStatus = Settings.Secure.isLocationProviderEnabled(contentResolver, LocationManager.GPS_PROVIDER);
    boolean networkWifiStatus = Settings.Secure.isLocationProviderEnabled(contentResolver, LocationManager.NETWORK_PROVIDER);

    //If GPS and Network location is not accessible show an alert and ask user to enable both
    if(!gpsStatus || !networkWifiStatus)
    {
        AlertDialog.Builder alertDialog = new AlertDialog.Builder(GetLocationMainActivity.this);

        alertDialog.setTitle("Make your location accessible ...");
        alertDialog.setMessage("Your Location is not accessible to us.To give attendance you have to enable it.");
        alertDialog.setIcon(R.drawable.warning);

        alertDialog.setNegativeButton("Enable", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int which) {
                startActivityForResult(new Intent(android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS), 0);
            }
        });

        alertDialog.setPositiveButton("Cancel", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog,int which) {
                Toast.makeText(getApplicationContext(), "Remember to give attandance you have to eanable it !", Toast.LENGTH_SHORT).show();
                dialog.cancel();
            }
        });

        alertDialog.show();
    }
    //IF GPS and Network location is accessible
    else 
    {
        nlocManager   = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
        nlocListener = new MyLocationListenerNetWork();
        nlocManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER,
                1000 * 1,  // 1 Sec        
                1,         // 1 meter   
                nlocListener);


        glocManager  = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
        glocListener = new MyLocationListenerGPS();
        glocManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,
                1000 * 1,  // 1 Sec        
                1,         // 1 meter           
                glocListener);
    }
}
}
4

2 に答える 2

0

設定で NETWORK-LOCATION と GPS-LOCATION の両方を有効にしましたか? 私の知る限り、Android ICS (4.x) 以降では、セキュリティの問題により、位置情報へのアクセスをプログラムで有効/無効にすることはできません。Android 2.x でテストしてみてください。お役に立てれば。

于 2013-08-07T06:31:55.230 に答える
0

新しい融合プロバイダーを使用して、混乱することなくユーザーの場所をすばやく取得できます。

新しい Google Play Services では、優先度に応じて最適なプロバイダーを自動的に選択するなど、位置情報の問題が簡素化されています。

リクエストの例を次に示します。

    private static final LocationRequest REQUEST = LocationRequest.create()
        .setInterval(20000) // 20 seconds
        .setFastestInterval(16) // 16ms = 60fps
        .setNumUpdates(4)
        .setPriority(LocationRequest.PRIORITY_BALANCED_POWER_ACCURACY);

SDK Manager で Google Play Services を更新したことを確認し、このリンクをチェックして、新しい Play Services でユーザーの位置情報を取得する方法についての情報を入手してください。 http://developer.android.com/training/location/retrieve-current.html

于 2013-08-10T14:08:17.747 に答える