이번에 제가 하는 프로젝트는 위치값(위도,경도를 받아서)
소켓통신으로 값을 보내는 것입니다.
그런데 , 핸드폰 마다 구동이 다르게 됩니다.
갤럭시3, 갤럭시 노트1(아이스크림샌드위치 /4.01)에서 되던 아래의 소스가
갤럭시2(아이스크림샌드위치/4.01)에서 구동이 안됩니다.
위도 경도 값을 아예 못받아 오고 있는데 뭐가 잘못된 걸까요? ㅠㅠ
버전은 갤럭시노트1 과 갤럭시2가 같은데 갤럭시2 자체가 위치값을 못받아 오는 걸까요??
도움 부탁드립니당....ㅠㅠㅠ
package com.example.gps_map;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.Socket;
import android.content.Context;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.util.Log;
import android.view.Menu;
import android.widget.Toast;
import com.google.android.gms.common.GooglePlayServicesUtil;
import com.google.android.gms.maps.CameraUpdate;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
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 GPS_Map extends FragmentActivity {
private GoogleMap mmap;
private LocationManager locationManager;
private String provider;
public double lat = 0.0;
public double lng = 0.0;
public double in1 = 0.0;
public double in2 = 0.0;
public int thread_flag=0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_gps__map);
GooglePlayServicesUtil.isGooglePlayServicesAvailable(GPS_Map.this);
startlocattionService();
requestThread thread = new requestThread();
thread.lat=lat;
thread.lng=lng;
thread.start();
while(thread_flag==0);
Log.d("value","Oncreate_in1:"+in1);
initmap();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.gps__map, menu);
return true;
}
@Override
public void onBackPressed() {
this.finish();
}
private void startlocattionService() {
locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
MyLocationListener listener = new MyLocationListener();
long minTime = 100000000;
float minDistance = 1000;
// GPS를 이용한 위치 요청
locationManager.requestLocationUpdates(
LocationManager.GPS_PROVIDER,
minTime,
minDistance,
listener);
// 네트워크를 이용한 위치 요청
locationManager.requestLocationUpdates(
LocationManager.NETWORK_PROVIDER,
minTime,
minDistance,
listener);
try {
Location lastLocation = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
if (lastLocation != null) {
lat = lastLocation.getLatitude();
lng = lastLocation.getLongitude();
Toast.makeText(getApplicationContext(), "Last Known Location : " + "Latitude : "+ lat + "\nLongitude:"+ lng, Toast.LENGTH_LONG).show();
}
} catch(Exception ex) {
ex.printStackTrace();
}
Toast.makeText(getApplicationContext(), "위치 확인이 시작되었습니다. 로그를 확인하세요.", Toast.LENGTH_SHORT).show();
}
public void initmap(){
if(mmap==null){
mmap = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map)).getMap();
if(mmap!=null){
addmarker();
}
}
}
public void addmarker(){
CameraUpdate center = CameraUpdateFactory.newLatLng(new LatLng(-31.90,115.86));//-31.90,115.86
CameraUpdate zoom = CameraUpdateFactory.zoomTo(16);
MarkerOptions marker = new MarkerOptions()
.position(new LatLng(-31.90,115.86))
.title("I'm Here♥");
mmap.moveCamera(center);
mmap.animateCamera(zoom);
mmap.addMarker(marker).showInfoWindow();
}
class MyLocationListener implements LocationListener{
@Override
public void onLocationChanged(Location location) {
Log.d("myLog" , "onLocationChanged: !!" + "onLocationChanged!!");
// startlocattionService();
//
// requestThread thread = new requestThread();
//
// thread.lat=lat;
// thread.lng=lng;
//
// thread.start();
//
// while(thread_flag==0);
//
// Log.d("value","Oncreate_in1:"+in1);
//
// initmap();
}
@Override
public void onProviderDisabled(String provider) {
// TODO Auto-generated method stub
}
@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
}
}
class requestThread extends Thread{
public double lat=0.0;
public double lng=0.0;
public void run(){
// while(true){
// try {
// request();
// Thread.sleep(100);
// } catch (InterruptedException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
// }
request();
}
public void request(){
try {
Socket Socket = new Socket("175.252.148.13",5001);
System.out.println("Client started");
ObjectOutputStream outstream = new ObjectOutputStream(Socket.getOutputStream());
outstream.writeDouble(lat);
outstream.writeDouble(lng);
outstream.flush();
ObjectInputStream instream = new ObjectInputStream(Socket.getInputStream());
in1 = instream.readDouble();
in2 = instream.readDouble();
Log.d("value","in1:"+in1);
Log.d("value","in2:"+in2);
thread_flag=1;
Socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}