2016-07-25 19 views
0

GoogleマップにGPS座標を表示しようとしています。私はSMSを介してGPS座標を取得しています。ビルドとアプリの生成は正しく行われますが、実際のデバイス(Android Kitkat)でアプリを起動した後、Googleマップには何も表示されず、SMS経由でGPS座標を受け取るとアプリがクラッシュして「残念ながら地図は停止しました。私のコードです:SMSでGPS座標を取得し、Googleマップに表示する

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'レシーバは' public'でなければなりません。これはSMS受信時にクラッシュの原因となっている可能性が最も高いです。あなたのマップについて知りません。 –

+0

@ Mike M:もし私がそれを公表したら、マニフェストはこのクラスが見つからないことを示します。どのようにこのクラスにアクセスするのですか? –

答えて

0

現在は動作しています。プログラムのupdate_location()の方法でMarkerOptions optionsを使用しました。そして、ここでoptions.position(found)をbyusingする更新方法であって、

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)); 
} 

私は、私のようなアプリケーションを作成しようとしている他の人には願っています。