1
Android應用程序是否可以通過程序識別設備是否位於室內。如果在室內使用GPS,我的應用會掛起。我使用下面的代碼:Android:如何以編程方式識別設備是否位於室內?
package com.first.Engagia;
import android.app.Activity;
import android.app.Dialog;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.Intent;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;
public class LocationView extends Activity {
public String userId;
public String appview_username;
public String appview_password;
public String userfirstname;
public String userlastname;
public String companyname;
public String AudienceFirstnameLastname;
public String LocationString;
private ProgressDialog mProgressDialog;
TextView tv;
boolean fetchedLocationStatus;
LocationManager locationManager;
LocationListener locationListener;
boolean gps_enabled = false;
boolean network_enabled = false;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.loc);
//setting passed userId
Bundle extras = getIntent().getExtras();
if(extras != null){
this.userId = extras.getString("userId");
this.appview_username = extras.getString("username");
this.appview_password = extras.getString("password");
this.userfirstname = extras.getString("userfirstname");
this.userlastname = extras.getString("userlastname");
this.companyname = extras.getString("companyname");
this.AudienceFirstnameLastname = extras.getString("AudienceFirstnameLastname");
}
//tv = (TextView) this.findViewById(R.id.thetext);
//tv.setText("Android Geo Location Snippet Here.\n\n");
//tv.setText("");
showDialog(0);
LocationView.this.mProgressDialog.setMessage("Getting your location...");
// Acquire a reference to the system Location Manager
locationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);
try {
LocationView.this.gps_enabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
} catch(Exception e) {
Log.e("LocationView", e.toString());
}
try{
LocationView.this.network_enabled = locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
} catch(Exception e) {
Log.e("LocationView", e.toString());
}
// Define a listener that responds to location updates
locationListener = new LocationListener() {
public void onStatusChanged(String provider, int status, Bundle extras) {}
public void onProviderEnabled(String provider) {}
public void onProviderDisabled(String provider) {}
public void onLocationChanged(Location location) {
// TODO Auto-generated method stub
if(displayCoordinates(location) == true) {
//getAddress(location.getLatitude(), location.getLongitude());
Log.d("LocationView", "Before Stop Location Updates.");
stopLocationUpdates();
}
}
};
if(LocationView.this.gps_enabled == true){
// Register the listener with the Location Manager to receive location updates
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locationListener);
}else if(LocationView.this.network_enabled == true){
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListener);
}else if(LocationView.this.gps_enabled == false && LocationView.this.network_enabled == false){
LocationUnavailable();
}
//so that the program will get the geo location once
}
public void stopLocationUpdates(){
locationManager.removeUpdates(locationListener);
}
public void LocationUnavailable(){
LocationView.this.mProgressDialog.setMessage("Location Unavailable...");
if(LocationView.this.mProgressDialog.isShowing()){
dismissDialog(0);
}
//go back to main_audience.html //3
Intent nextActivity = new Intent(LocationView.this, AppView.class);
nextActivity.putExtra("userId", LocationView.this.userId);
nextActivity.putExtra("username", LocationView.this.appview_username);
nextActivity.putExtra("password", LocationView.this.appview_password);
nextActivity.putExtra("userfirstname", LocationView.this.userfirstname);
nextActivity.putExtra("userlastname", LocationView.this.userlastname);
nextActivity.putExtra("companyname", LocationView.this.companyname);
nextActivity.putExtra("AudienceFirstnameLastname", LocationView.this.AudienceFirstnameLastname);
nextActivity.putExtra("latitude", "Unavailable");
nextActivity.putExtra("longitude", "Unavailable");
nextActivity.putExtra("origin", "LocationView");
finish();
startActivity(nextActivity);
}
public boolean displayCoordinates(Location location){
//String txtMsg = "Latitude: " + location.getLatitude() + "\nLongitude: " + location.getLongitude();
//Toast.makeText(getBaseContext(), txtMsg, Toast.LENGTH_SHORT).show();
LocationView.this.mProgressDialog.setMessage("Location Available...");
if(LocationView.this.mProgressDialog.isShowing()){
dismissDialog(0);
}
//go back to main_audience.html //3
Intent nextActivity = new Intent(LocationView.this, AppView.class);
nextActivity.putExtra("userId", LocationView.this.userId);
nextActivity.putExtra("username", LocationView.this.appview_username);
nextActivity.putExtra("password", LocationView.this.appview_password);
nextActivity.putExtra("userfirstname", LocationView.this.userfirstname);
nextActivity.putExtra("userlastname", LocationView.this.userlastname);
nextActivity.putExtra("companyname", LocationView.this.companyname);
nextActivity.putExtra("AudienceFirstnameLastname", LocationView.this.AudienceFirstnameLastname);
nextActivity.putExtra("latitude", location.getLatitude());
nextActivity.putExtra("longitude", location.getLongitude());
nextActivity.putExtra("LocationString", LocationView.this.LocationString);
nextActivity.putExtra("origin", "LocationView");
finish();
startActivity(nextActivity);
//this.tv.append(txtMsg);
//Toast.makeText(getBaseContext(), txtMsg, Toast.LENGTH_SHORT).show();
return true;
}
@Override
protected Dialog onCreateDialog(int id) {
switch (id) {
case 0:
mProgressDialog = new ProgressDialog(this);
mProgressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
mProgressDialog.show();
return mProgressDialog;
default:
return null;
}
}
}
非常感謝您的回覆,您對此有了很好的想法,您是否有示例代碼來檢查您是否可以在特定時間內收到與GPS相關的詳細信息? – Emkey
一個簡單的想法是,如果你沒有得到你正在尋找的答案,你可以在預定的時間內設置一個計時器並設置時間,你可以顯示一條提示信息。檢查如何在應用程序中使用計時器。 – sat
感謝您的想法坐了,現在我明白了! :) – Emkey