2015-12-04 45 views
-3

我想在我的手機(android)上製作一個程序,讓用戶找到他的own_ship位置和方向,所以我使用了App Inventor來創建應用程序。所以任何人都可以幫助我製作這個應用程序,因爲我是Android編程的新手。用android找到位置

+0

您可以輕鬆地做到這一點與App Inventor一起使用。請參閱[位置傳感器教程](http://explore.appinventor.mit.edu/ai2/tutorials?field_tutorial_type_tid [] = 91)作爲開始,並參閱[App Inventor論壇中的以下主題](https:// groups.google.com/d/msg/mitappinventortest/EIQjSZTnVgc/dG_RSlhFEQAJ)以獲取更多信息 – Taifun

回答

0

我不會使用Appinventor來構建這樣的應用程序。使用原生Android並通過經度和緯度獲取對象的位置。最好的例子是following

不要忘了這個權限添加到清單文件:

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 

爲Java類的代碼需要類似下面的東西:

public class MainActivity extends Activity implements ConnectionCallbacks, 
    OnConnectionFailedListener, LocationListener { 

// LogCat tag 
private static final String TAG = MainActivity.class.getSimpleName(); 

private final static int PLAY_SERVICES_RESOLUTION_REQUEST = 1000; 

private Location mLastLocation; 

// Google client to interact with Google API 
private GoogleApiClient mGoogleApiClient; 

// boolean flag to toggle periodic location updates 
private boolean mRequestingLocationUpdates = false; 

private LocationRequest mLocationRequest; 

// Location updates intervals in sec 
private static int UPDATE_INTERVAL = 10000; // 10 sec 
private static int FATEST_INTERVAL = 5000; // 5 sec 
private static int DISPLACEMENT = 10; // 10 meters 

// UI elements 
private TextView lblLocation; 
private Button btnShowLocation, btnStartLocationUpdates; 

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

    lblLocation = (TextView) findViewById(R.id.lblLocation); 
    btnShowLocation = (Button) findViewById(R.id.btnShowLocation); 
    btnStartLocationUpdates = (Button) findViewById(R.id.btnLocationUpdates); 

    // First we need to check availability of play services 
    if (checkPlayServices()) { 

     // Building the GoogleApi client 
     buildGoogleApiClient(); 

     createLocationRequest(); 
    } 

    // Show location button click listener 
    btnShowLocation.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      displayLocation(); 
     } 
    }); 

    // Toggling the periodic location updates 
    btnStartLocationUpdates.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      togglePeriodicLocationUpdates(); 
     } 
    }); 

} 

@Override 
protected void onStart() { 
    super.onStart(); 
    if (mGoogleApiClient != null) { 
     mGoogleApiClient.connect(); 
    } 
} 

@Override 
protected void onResume() { 
    super.onResume(); 

    checkPlayServices(); 

    // Resuming the periodic location updates 
    if (mGoogleApiClient.isConnected() && mRequestingLocationUpdates) { 
     startLocationUpdates(); 
    } 
} 

@Override 
protected void onStop() { 
    super.onStop(); 
    if (mGoogleApiClient.isConnected()) { 
     mGoogleApiClient.disconnect(); 
    } 
} 

@Override 
protected void onPause() { 
    super.onPause(); 
    stopLocationUpdates(); 
} 

/** 
* Method to display the location on UI 
* */ 
private void displayLocation() { 

    mLastLocation = LocationServices.FusedLocationApi 
      .getLastLocation(mGoogleApiClient); 

    if (mLastLocation != null) { 
     double latitude = mLastLocation.getLatitude(); 
     double longitude = mLastLocation.getLongitude(); 

     lblLocation.setText(latitude + ", " + longitude); 

    } else { 

     lblLocation 
       .setText("(Couldn't get the location. Make sure location is enabled on the device)"); 
    } 
} 

/** 
* Method to toggle periodic location updates 
* */ 
private void togglePeriodicLocationUpdates() { 
    if (!mRequestingLocationUpdates) { 
     // Changing the button text 
     btnStartLocationUpdates 
       .setText(getString(R.string.btn_stop_location_updates)); 

     mRequestingLocationUpdates = true; 

     // Starting the location updates 
     startLocationUpdates(); 

     Log.d(TAG, "Periodic location updates started!"); 

    } else { 
     // Changing the button text 
     btnStartLocationUpdates 
       .setText(getString(R.string.btn_start_location_updates)); 

     mRequestingLocationUpdates = false; 

     // Stopping the location updates 
     stopLocationUpdates(); 

     Log.d(TAG, "Periodic location updates stopped!"); 
    } 
} 

/** 
* Creating google api client object 
* */ 
protected synchronized void buildGoogleApiClient() { 
    mGoogleApiClient = new GoogleApiClient.Builder(this) 
      .addConnectionCallbacks(this) 
      .addOnConnectionFailedListener(this) 
      .addApi(LocationServices.API).build(); 
} 

/** 
* Creating location request object 
* */ 
protected void createLocationRequest() { 
    mLocationRequest = new LocationRequest(); 
    mLocationRequest.setInterval(UPDATE_INTERVAL); 
    mLocationRequest.setFastestInterval(FATEST_INTERVAL); 
    mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY); 
    mLocationRequest.setSmallestDisplacement(DISPLACEMENT); 
} 

/** 
* Method to verify google play services on the device 
* */ 
private boolean checkPlayServices() { 
    int resultCode = GooglePlayServicesUtil 
      .isGooglePlayServicesAvailable(this); 
    if (resultCode != ConnectionResult.SUCCESS) { 
     if (GooglePlayServicesUtil.isUserRecoverableError(resultCode)) { 
      GooglePlayServicesUtil.getErrorDialog(resultCode, this, 
        PLAY_SERVICES_RESOLUTION_REQUEST).show(); 
     } else { 
      Toast.makeText(getApplicationContext(), 
        "This device is not supported.", Toast.LENGTH_LONG) 
        .show(); 
      finish(); 
     } 
     return false; 
    } 
    return true; 
} 

/** 
* Starting the location updates 
* */ 
protected void startLocationUpdates() { 

    LocationServices.FusedLocationApi.requestLocationUpdates(
      mGoogleApiClient, mLocationRequest, this); 

} 

/** 
* Stopping location updates 
*/ 
protected void stopLocationUpdates() { 
    LocationServices.FusedLocationApi.removeLocationUpdates(
      mGoogleApiClient, this); 
} 

/** 
* Google api callback methods 
*/ 
@Override 
public void onConnectionFailed(ConnectionResult result) { 
    Log.i(TAG, "Connection failed: ConnectionResult.getErrorCode() = " 
      + result.getErrorCode()); 
} 

@Override 
public void onConnected(Bundle arg0) { 

    // Once connected with google api, get the location 
    displayLocation(); 

    if (mRequestingLocationUpdates) { 
     startLocationUpdates(); 
    } 
} 

@Override 
public void onConnectionSuspended(int arg0) { 
    mGoogleApiClient.connect(); 
} 

@Override 
public void onLocationChanged(Location location) { 
    // Assign the new location 
    mLastLocation = location; 

    Toast.makeText(getApplicationContext(), "Location changed!", 
      Toast.LENGTH_SHORT).show(); 

    // Displaying the new location on UI 
    displayLocation(); 
} 
+0

如果能幫助您,請您接受並提出我的回答? –