2017-09-12 67 views
2

我是Android Studio新手。作为短信发送当前位置Android Studio

我试图发送当前位置作为单击按钮时的文本消息,但没有任何反应,当我点击。

首先,这里是我的XML:

<Button android:id="@+id/emergency" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentStart="true" 
     android:layout_centerVertical="true" 
     android:layout_marginLeft="14dp" 
     android:layout_marginStart="14dp" 
     android:background="@drawable/button_selector1" 
     android:drawableEnd="@android:drawable/ic_dialog_alert" 
     android:gravity="center" 
     android:maxLines="1" 
     android:paddingLeft="15dip" 
     android:paddingRight="15dip" /> 

然后,这里是我的MainActivity代码:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    requestWindowFeature(Window.FEATURE_NO_TITLE); 
    setContentView(R.layout.ly_home); 

    emergency = (Button) findViewById(R.id.emergency); 

    emergency.setOnClickListener(new View.OnClickListener(){ 
     @Override 
     public void onClick(View v){ 
      GPStracker g = new GPStracker(getApplicationContext()); 
      Location l = g.getLocation(); 
      if (l != null){ 
       double lat = l.getLatitude(); 
       double lon = l.getLongitude(); 
       String message="http://maps.google.com/maps?saddr="+lat+","+lon; 
       String number = "xxxxxxxx"; 
       SmsManager smsManager = SmsManager.getDefault(); 
       StringBuffer smsBody = new StringBuffer(); 
       smsBody.append(Uri.parse(message)); 
       android.telephony.SmsManager.getDefault().sendTextMessage(number, null, smsBody.toString(), null,null); 
      } 
     } 
    }); 
} 

而且,我的GPStracker类:​​

public class GPStracker implements LocationListener{ 

    Context context; 
    public GPStracker(Context c){ 
     context = c; 
    } 

    public Location getLocation(){ 

     LocationManager lm = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE); 
     boolean isGPSEnabled = lm.isProviderEnabled(LocationManager.GPS_PROVIDER); 
     if (isGPSEnabled){ 
      lm.requestLocationUpdates(LocationManager.GPS_PROVIDER,6000,10,this); 
      Location l = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER); 
      return l; 
     }else{ 
      Toast.makeText(context,"Please enable GPS", Toast.LENGTH_LONG).show(); 
     } 
     return null; 
    } 

    @Override 
    public void onLocationChanged(Location location) { 

    } 

    @Override 
    public void onStatusChanged(String provider, int status, Bundle extras) { 

    } 

    @Override 
    public void onProviderEnabled(String provider) { 

    } 

    @Override 
    public void onProviderDisabled(String provider) { 

    } 
} 

我给的权限在清单中:精细的位置,粗略的位置和收发短信。我究竟做错了什么?

+0

你有没有得到任何位置? (在通过短信发送之前) – user3808887

回答

0

按照下面的答案 https://stackoverflow.com/a/43199211/6835152

有两种不同的方法来检索位置,一个是基于网络,另一个是基于GPS服务。当然,基于GPS服务的位置总是更加准确。根据该文件,可能需要一些时间才能使用GPS服务接收位置。在这种情况下,通过使用getLastKnownLocation()方法可以使用最后一个已知位置来获取最近可用的位置。在这里,要获取最后一个可用位置,您应该将LocationManager.GPS_PROVIDER更改为LocationManager.NETWORK_PROVIDER。

如果您希望接收基于GPS服务的准确实时位置信息,我建议您使用FusedLocationApi。你可以在这里找到https://developer.android.com/training/location/receive-location-updates.html

+0

在您的代码中,您没有收到上次已知的位置 –

+0

因此,我应该更改LocationManager.NETWORK_PROVIDER的LocationManager.GPS_PROVIDER,并且这样我会收到最后一个已知位置? – user8559076

+0

是的,你会收到位置,但我更喜欢使用融合的位置API,因为您必须添加谷歌播放服务,这也是很容易集成的。 –

0

使用位置服务和融合位置API 您是否添加了对Google Play服务的依赖关系?

以下是获取当前位置的tutorial

您也可以找到代码发送短信here