2016-07-25 172 views
0

我试图在谷歌地图上显示GPS坐标。我正在通过短信获取GPS坐标。建设和应用生成是正确完成的,但在真实设备上启动应用后(android kitkat),谷歌地图不显示任何东西,一旦我通过短信收到GPS坐标,应用崩溃显示“不幸地图已停止”。是我的代码:通过短信获取GPS坐标并在谷歌地图上显示

import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.os.Build; 
import android.support.v4.app.FragmentActivity; 
import android.os.Bundle; 
import android.telephony.SmsManager; 
import android.widget.Toast; 

import com.google.android.gms.maps.CameraUpdateFactory; 
import com.google.android.gms.maps.GoogleMap; 
import com.google.android.gms.maps.OnMapReadyCallback; 
import com.google.android.gms.maps.SupportMapFragment; 
import com.google.android.gms.maps.model.LatLng; 
import com.google.android.gms.maps.model.MarkerOptions; 

public class MapsActivity extends FragmentActivity implements  
OnMapReadyCallback { 

static private GoogleMap mMap; 
int index=0;//index of SMS recieved 
int index2=0; 
char[] Lat=new char[15]; 
char[] Lon=new char[15]; 


@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_maps); 
    // Obtain the SupportMapFragment and get notified when the map is ready to be used. 
    SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager() 
      .findFragmentById(R.id.map); 
    mapFragment.getMapAsync(this); 
} 
private BroadcastReceiver mReceiver = new BroadcastReceiver() { 
    @Override 
    public void onReceive(Context context, Intent intent) { 

    // Get the data (SMS data) bound to intent 
     Bundle bundle = intent.getExtras(); 
    SmsMessage[] msgs = null; 

     String str = ""; 
     String format = bundle.getString("format"); 

     if (bundle != null) 
     { 
      Object [] pdus = (Object[]) bundle.get("pdus"); 

      msgs= new SmsMessage[pdus.length]; 

      for (int i = 0; i < messages.length; i++) 
      { 
       if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { 
        String format = myBundle.getString("format"); 
        messages[i] = SmsMessage.createFromPdu((byte[]) pdus[i], format); 
       } 
       // else { 
       // messages[i] = SmsMessage.createFromPdu((byte[]) pdus[i]); 
       //} 
       strMessage += messages[i].getOriginatingAddress(); 
       strMessage += " : "; 
       strMessage += messages[i].getMessageBody(); 
       index=strMessage.indexOf(":"); 
       index2=strMessage.indexOf(","); 
       strMessage.getChars(index,index2,Lat,0);//extracting latitude from Latitude: to , 
       index=strMessage.lastIndexOf(":");//getting last index of : which will be Longitude: 
       index2=strMessage.length();//getting the length of string 
       strMessage.getChars(index,index2,Lon,0);//extracting longitude from : to last char of string 
       strMessage += "\n"; 
      } 

      Toast.makeText(context, strMessage, Toast.LENGTH_SHORT).show(); 
      update_location(); 
     } 
      } // bundle is null 
     } 
@Override 
public void onMapReady(GoogleMap googleMap) { 
    mMap = googleMap; 

    // Add a marker in Sydney and move the camera 
    LatLng venkateshnagar = new LatLng(20.8781753,15.3481637); 
    mMap.addMarker(new MarkerOptions().position(venkateshnagar).title("random location for startup")); 
    mMap.moveCamera(CameraUpdateFactory.newLatLng(venkateshnagar)); 
    mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(venkateshnagar,18)); 
} 




void update_location(){ 
double Lat1=Double.parseDouble(Lat.toString()); 
double Lon2=Double.parseDouble(Lon.toString()); 
    LatLng found=new LatLng(Lat1,Lon2); 
    mMap.addMarker(new MarkerOptions().position(found).title("this is current location")); 
    mMap.moveCamera(CameraUpdateFactory.newLatLng(found)); 
    mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(found,18)); 
    } 
    } 

我做错了什么。

+0

将崩溃日志添加到您的问题。 – TDG

+0

您的'getSMS' Receiver必须是'public',这很可能是什么原因导致短信收到后崩溃。不知道你的地图。 –

+0

@ Mike M:如果我将它公开,那么Manifest显示这个类没有找到。那么如何访问这个类呢? –

回答

0

现在它的工作。我在我的程序中使用了MarkerOptions optionsupdate_location()方法。然后byusing options.position(found)以下是更新方法:

public void update_Loc() 
    {            // Instantiating MarkerOptions class 
    MarkerOptions options = new MarkerOptions(); 
    // Toast.makeText(getApplicationContext(), Lat.toString()+Lon.toString(), Toast.LENGTH_LONG).show(); 
    double Lat1=Double.parseDouble(Lat); 
    double Lon2=Double.parseDouble(Lon); 
    LatLng found=new LatLng(Lat1,Lon2); 
    options.position(found); 
    Marker mapMarker=mMap.addMarker(options); 
    options.title("This is the current location"); 
    mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(found,26)); 
} 

我希望这将别人谁试图让应用程序像我一样。