zoukankan      html  css  js  c++  java
  • android gps开发

    AndroidManifest.xml

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

    main.java

    package com.mrsoft.mrgps.app.mr;

    import android.app.Activity;
    import android.app.ActivityManager;
    import android.app.AlertDialog;
    import android.app.AlertDialog.Builder;
    import android.content.Context;
    import android.content.DialogInterface;
    import android.content.DialogInterface.OnClickListener;
    import android.location.Criteria;
    import android.location.Location;
    import android.location.LocationListener;
    import android.location.LocationManager;
    import android.os.Bundle;
    import android.view.KeyEvent;
    import android.view.Menu;
    import android.view.MenuItem;
    import android.widget.TextView;
    import android.widget.Toast;

    public class main extends Activity {
    private TextView tv;
    private LocationManager lm;
    private Criteria criteria;
    private Location location;
    private final static int MENU_ABOUT = Menu.FIRST;
    private final static int MENU_EXIT = Menu.FIRST+1;
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    tv = (TextView)findViewById(R.id.tv);

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

    if (!lm.isProviderEnabled(android.location.LocationManager.GPS_PROVIDER))
    {
    Toast.makeText(this, "GPS已关闭,请手动开启GPS后再试!", Toast.LENGTH_SHORT).show();
    return;
    }
    else
    {
    Toast.makeText(this, "GPS定位中...", Toast.LENGTH_SHORT).show();
    }

    criteria = new Criteria();
    criteria.setAccuracy(Criteria.ACCURACY_FINE); // 设置精确度
    criteria.setAltitudeRequired(true); // 设置请求海拔
    criteria.setBearingRequired(true); // 设置请求方位
    criteria.setCostAllowed(true); // 设置允许运营商收费
    criteria.setPowerRequirement(Criteria.POWER_LOW); // 低功耗

    String provider = lm.getBestProvider(criteria, true);
    location = lm.getLastKnownLocation(provider);
    newLocalGPS(location);
    // 监听1秒一次 忽略位置变化
    lm.requestLocationUpdates(provider, 1*1000, 0, new locationListener());
    }

    class locationListener implements LocationListener
    {

    @Override
    public void onLocationChanged(Location location) {
    // TODO Auto-generated method stub
    newLocalGPS(location);
    }

    @Override
    public void onProviderDisabled(String provider) {
    // TODO Auto-generated method stub
    newLocalGPS(null);
    }

    @Override
    public void onProviderEnabled(String provider) {
    // TODO Auto-generated method stub

    }

    @Override
    public void onStatusChanged(String provider, int status, Bundle extras) {
    // TODO Auto-generated method stub

    }

    }

    private void newLocalGPS(Location location)
    {
    if (location!=null)
    {
    double latitude = location.getLatitude(); //精度
    double longitude = location.getLongitude(); // 纬度
    double speed = location.getSpeed(); // 速度
    double altitude = location.getAltitude(); // 海拔
    double bearing = location.getBearing(); // 方位
    tv.setText("精度"+latitude+'\n'+
    "纬度"+longitude+'\n'+
    "速度"+speed+"m/s"+'\n'+
    "海拔"+altitude+"m"+'\n'+
    "方位"+bearing+'\n');
    }
    else
    {
    // 未获取地理信息位置
    tv.setText("地理信息位置未知或正在获取地理信息位置中...");
    }
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
    // TODO Auto-generated method stub
    menu.add(0, MENU_ABOUT, 1, "关于");
    menu.add(0, MENU_EXIT, 2, "退出");
    return super.onCreateOptionsMenu(menu);
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
    // TODO Auto-generated method stub
    switch (item.getItemId())
    {
    case MENU_ABOUT:
    AlertDialog.Builder bd = new Builder(main.this);
    bd.setMessage("mrGPS.apk\n版本:1.0\n作者:mrandexe");
    bd.setTitle("关于");
    bd.setPositiveButton("确认", new OnClickListener(){
    @Override
    public void onClick(DialogInterface arg0, int arg1) {
    // TODO Auto-generated method stub
    arg0.dismiss();
    }
    });
    bd.create().show();
    break;
    case MENU_EXIT:
    exit();
    break;
    }
    return super.onOptionsItemSelected(item);
    }

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
    // TODO Auto-generated method stub
    if (keyCode==KeyEvent.KEYCODE_BACK && event.getRepeatCount()==0)
    {
    exit();
    return true;
    }
    return super.onKeyDown(keyCode, event);
    }

    private void exit()
    {
    AlertDialog.Builder builder = new Builder(main.this);
    builder.setMessage("确认退出吗?");
    builder.setTitle("提示");
    builder.setPositiveButton("确认", new OnClickListener(){
    @Override
    public void onClick(DialogInterface arg0, int arg1) {
    // TODO Auto-generated method stub
    arg0.dismiss();
    ActivityManager actMgr = (ActivityManager)getSystemService(ACTIVITY_SERVICE);
    actMgr.restartPackage(getPackageName());
    }
    });
    builder.setNegativeButton("取消", new OnClickListener(){

    @Override
    public void onClick(DialogInterface dialog, int which) {
    // TODO Auto-generated method stub
    dialog.dismiss();
    }
    });
    builder.create().show();

    }
    }

    main.xml

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width
    ="fill_parent"
    android:layout_height
    ="fill_parent">
    <TextView android:text="TextView" android:layout_width="wrap_content" android:id="@+id/tv" android:layout_height="wrap_content"></TextView>
    </LinearLayout>





  • 相关阅读:
    [CodeForces]Codeforces Round #429 (Div. 2) ABC(待补)
    About Me
    2018-06-14
    Codeforces Codeforces Round #484 (Div. 2) E. Billiard
    Codeforces Codeforces Round #484 (Div. 2) D. Shark
    Codeforces Educational Codeforces Round 44 (Rated for Div. 2) F. Isomorphic Strings
    Codeforces Educational Codeforces Round 44 (Rated for Div. 2) E. Pencils and Boxes
    Codeforces Avito Code Challenge 2018 D. Bookshelves
    Codeforces Round #485 (Div. 2) D. Fair
    Codeforces Round #485 (Div. 2) F. AND Graph
  • 原文地址:https://www.cnblogs.com/icedog/p/2368800.html
Copyright © 2011-2022 走看看