打开gps并使用它

Posted

技术标签:

【中文标题】打开gps并使用它【英文标题】:turn on gps and using it 【发布时间】:2013-09-26 02:44:26 【问题描述】:

我有一个获取用户位置的类。

如果 GPS 关闭,我将其打开并显示位置,但它不起作用。

这是类:

public class UseGPS implements Runnable

Activity activity;
Context context;

private ProgressDialog pd;

LocationManager mLocationManager;
Location mLocation;
MyLocationListener mLocationListener;

Location currentLocation = null;


public UseGPS(Activity Activity, Context Context)
    this.activity = Activity;
    this.context = Context;



public void getMyPos()

    DialogInterface.OnCancelListener dialogCancel = new DialogInterface.OnCancelListener() 
        public void onCancel(DialogInterface dialog) 
            Toast.makeText(activity,"no gps signal",Toast.LENGTH_LONG).show(); 
            handler.sendEmptyMessage(0);                
            
     ;

     pd = ProgressDialog.show(activity,context.getString(R.string.looking_for), context.getString(R.string.gps_signal), true, true, dialogCancel);   
     writeSignalGPS();



private void setCurrentLocation(Location loc) 
    currentLocation = loc;



private void writeSignalGPS() 

    Thread thread = new Thread(this);
    thread.start();



public void run() 

    mLocationManager = (LocationManager)context.getSystemService(Context.LOCATION_SERVICE);

    Looper.prepare();

    mLocationListener = new MyLocationListener();
    mLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, mLocationListener);

    Looper.loop(); 
    Looper.myLooper().quit(); 



private Handler handler = new Handler() 
    @Override
    public void handleMessage(Message msg) 
        pd.dismiss();
        mLocationManager.removeUpdates(mLocationListener);

        if (currentLocation!=null) 
              Toast.makeText(activity,currentLocation.getLatitude(),Toast.LENGTH_LONG).show();
              Toast.makeText(activity,currentLocation.getLongitude(),Toast.LENGTH_LONG).show(); 

        
    

;

private class MyLocationListener implements LocationListener 
    @Override
    public void onLocationChanged(Location loc) 
        if (loc != null) 
            setCurrentLocation(loc);
            handler.sendEmptyMessage(0);

        
    

    @Override
     public void onProviderDisabled(String provider) 

             /*turn on GPS*/
        Intent intent = new Intent("android.location.GPS_ENABLED_CHANGE");
        intent.putExtra("enabled", true);
        context.sendBroadcast(intent);


     

    @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
    
 

打开 GPS 时代码可以工作,但不能打开 gps。

我能做什么?

【问题讨论】:

如果在“设置”中禁用了 GPS,则无法通过代码将其打开。早期版本的 Android 确实允许它,但后来(发布 Gingerbread?)版本禁止它。 要求用户开启 您无法以编程方式打开 GPS。这个问题已经出现过很多次了。请在发布问题之前先进行搜索。 onProviderDisabled() 中的 script-kiddie hack 不适用于大多数 Android 设备。 【参考方案1】:

在您的应用启动时,弹出一条消息,让用户选择打开 GPS。

此弹出按钮导航到设置中的 GPS 设置,以便他们的用户可以打开 GPS。

这里是sn-p的代码:

AlertDialog gpsonBuilder = new AlertDialog.Builder(Home_Activity.this);
 gpsonBuilder.setTitle("Your Gps Provider is disabled please Enable it");
 gpsonBuilder.setPositiveButton("ON",new DialogInterface.OnClickListener() 

  public void onClick(DialogInterface arg0, int arg1) 
 startActivity(new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS));
                        
                    );
            gpsonBuilder.show();

【讨论】:

以上是关于打开gps并使用它的主要内容,如果未能解决你的问题,请参考以下文章

Android:检测 GPS 何时打开/关闭(或当没有应用程序不再使用它时)

使用 XAMARIN 打开 GPS

Android GPS 无法获取我的位置

哪个应用正在使用 Android Gps 引擎

如何使用python 3从内部gps获取数据?

如果 gps 打开,位置管理器不起作用。如果 gps 打开,它工作正常