案例二:通过查找可用的提供器来获得当前的位置信息
LocationManager还提供了一个用来获取设备上所有可用提供器的方法getProviders(boolean b),如果传进去的boolean值为true,则表示获取所有的可用提供器,若为false则表示返回已经启用的。
1)在main.xml布局文件中添加一个用来单击事件的Button组件和一个用来显示当前位置信息的TextView组件,具体代码如下:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" >
<Button android:id="@+id/gain" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="获取当前的位置信息"/> <TextView android:id="@+id/info" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="等待..." />
</LinearLayout>
|
2)在一个继承自Activity类的MainActivity.java中取得相应组件的id、LocationManager的服务及各位提供器,具体实现代码如下:
package zjh.android.lx;
import java.util.List;
import android.app.Activity; import android.content.Context; import android.location.Location; import android.location.LocationListener; import android.location.LocationManager; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.TextView;
public class MainActivity extends Activity { private Button gain = null; private TextView info = null; private LocationManager manager = null; private double latitude,longitude; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //取得相应组件的id this.gain = (Button)super.findViewById(R.id.gain); this.info = (TextView)super.findViewById(R.id.info); //获得LocationManager的服务 this.manager = (LocationManager)super.getSystemService(Context.LOCATION_SERVICE);
this.gain.setOnClickListener(new OnClickListener(){
@Override public void onClick(View v) { MainActivity.this.GainLocation(); }
}); } /* * GainLocation()方法用来获取当前的位置信息 */ public void GainLocation(){ //取得所有可用的提供器 List<String> providers = manager.getProviders(true); //循环遍历每一个提供器 for(String provider : providers){ //每隔1秒钟更新一次当前的位置信息,并监听位置的改变 manager.requestLocationUpdates(provider, 1000, 0, new LocationListener() { @Override public void onStatusChanged(String provider, int status, Bundle extras) {} @Override public void onProviderEnabled(String provider) {} @Override public void onProviderDisabled(String provider) {} @Override public void onLocationChanged(Location location) {} });
Location location = manager.getLastKnownLocation(provider); if(location!=null){ latitude = location.getLatitude(); // 获得经度 longitude = location.getLongitude(); // 获得纬度 }else{ MainActivity.this.info.setText("获取位置信息失败"); }
} MainActivity.this.info.setText("经度为:"+latitude+"\n"+"纬度为:"+longitude);
}
}
|
3)在AndroidMainfest.xml文件中添加相应的权限:
<!-- GPS provider的权限 --> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> <!-- Network provide的权限 --> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> |