2016-04-09 11 views
0

私はこの問題に関してGoogleで検索しましたが、 ソリューションを取得しませんでした。デバイスの位置の経度と緯度を取得しようとしています。 ユーザーはカメラから画像をクリックします。そのとき私は をGPSを使用している機器の緯度と時間に合わせて表示する必要があります。しかし、 は働いていません。ここでAndroidで緯度と経度を取得していない

私のコードです: -

public class MainActivity extends Activity { 

    EditText editAddress,editName; 
    ImageView ivPhoto; 
    Button btnTakePic,btnNext1; 
    Bitmap bitMap; 
    static int TAKE_PICTURE = 1; 

    protected LocationManager locationManager; 
    protected LocationListener locationListener; 
    protected Context context; 
    TextView txtLat; 
    String lat; 
    String provider; 
    protected double latitude,longitude; 
    protected boolean gps_enabled,network_enabled; 

    private static final long MINIMUM_DISTANCE_CHANGE_FOR_UPDATES = 1; // in Meters 

    private static final long MINIMUM_TIME_BETWEEN_UPDATES = 1000; // in Milliseconds 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 


     editAddress = (EditText)findViewById(R.id.edtAddress); 
     editName = (EditText)findViewById(R.id.edtName); 
     ivPhoto = (ImageView)findViewById(R.id.ivPhoto); 
     btnTakePic = (Button)findViewById(R.id.btnTakePic); 
     btnNext1 = (Button)findViewById(R.id.btnNext1); 


     btnTakePic.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 

       Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
       startActivityForResult(intent,TAKE_PICTURE); 

      } 
     }); 

     btnNext1.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 

       Intent nextIntent = new Intent(MainActivity.this,ContactPersonDetail.class); 
       startActivity(nextIntent); 
      } 
     }); 
    } 

    private void GetLocationLatLong() { 


     locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 

     // locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, this); 
     locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,MINIMUM_TIME_BETWEEN_UPDATES, MINIMUM_DISTANCE_CHANGE_FOR_UPDATES, new MyLocationListener()); 

     Location location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER); 

     if(location!=null){ 


      String message = String.format("Current Location \\n Longitude: %1$s \\n Latitude: %2$s",location.getLongitude(), location.getLatitude()); 
      Toast.makeText(MainActivity.this,message,Toast.LENGTH_SHORT).show(); 
     } 

    } 


    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent intent) { 

     if (requestCode == TAKE_PICTURE && resultCode== RESULT_OK && intent != null){ 
      // get bundle 
      Bundle extras = intent.getExtras(); 

      // get bitmap 
      bitMap = (Bitmap) extras.get("data"); 
      ivPhoto.setImageBitmap(bitMap); 

      GetLocationLatLong(); 

     } 
    } 

    private class MyLocationListener implements LocationListener{ 



     @Override 
     public void onLocationChanged(Location location) { 
      String message = String.format("New Location \n Longitude: %1$s \n Latitude: %2$s", location.getLongitude(), location.getLatitude()); 

      longitude = location.getLongitude(); 
      latitude = location.getLatitude(); 

      Toast.makeText(MainActivity.this, message, Toast.LENGTH_LONG).show(); 

      Log.d("Longittuteeeeeeeeeeee",message); 
     } 

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




      Toast.makeText(MainActivity.this, "Provider status changed",Toast.LENGTH_LONG).show(); 


     } 

     @Override 
     public void onProviderEnabled(String provider) { 
      Toast.makeText(MainActivity.this,"Provider enabled by the user. GPS turned on", Toast.LENGTH_LONG).show(); 

     } 

     @Override 
     public void onProviderDisabled(String provider) { 

      Toast.makeText(MainActivity.this, "Provider disabled by the user. GPS turned off", Toast.LENGTH_LONG).show(); 

     } 
    } 


} 

これらは、マニフェストに使用権限ある: - これらの権限で

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> 
<uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" /> 
<uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" /> 
<uses-permission android:name="android.permission.CONTROL_LOCATION_UPDATES" /> 
<uses-permission android:name="android.permission.INTERNET"/> 

、2つの権限(ACCESS_MOCK_LOCATION、 CONTROL_LOCATION_UPDATES)がエラーを出しています。許可で

エラー: -

アンドロイド許可使用しています:名=「android.permission.ACCESS_MOCK_LOCATION」

モック場所は唯一のテストやデバッグ専用 マニフェストで要求されなければなりません... (Ctrl + F1)モックロケーションプロバイダ(許可 android.permission.ACCESS_MOCK_LOCATIONを要求することによって)は、デバッグ ビルド(またはテスト) 。 Gradleプロジェクトでは、 は、テストまたはデバッグソースセットマニフェストファイルでこの権限を要求する必要があることを意味します。これを修正するには、デバッグ フォルダーに新しいマニフェストファイルを作成し、そこで要素を移動します。 Gradleプロジェクトの のデバッグマニフェストオーバーライドファイルへの一般的なパスは、 src/debug/AndroidManifest.xmlです。

ここで私が間違っていることを教えてください。

+0

使用しているコードは、場所の変更があった場合に経度緯度取得するためですが、私はあなたがいることを必要としないと思います。あなたは単にこのリンクhttp://www.androidhive.info/2012/07/android-gps-location-manager-tutorial/に従って、緯度と経度を取得することができます。あなただけがgetLatitudeとgetLongitudeメソッドに関連するコードが必要です –

答えて

0

あなたGetLocationLatLong機能のこの部分は、あなたのonCreateメソッドである必要があります

locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 
    locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,MINIMUM_TIME_BETWEEN_UPDATES, MINIMUM_DISTANCE_CHANGE_FOR_UPDATES, new MyLocationListener()); 

あなたは、そのメソッドの前にrequestLocationUpdatesを設定する必要があります。残りはうまくいくはずです。

また、あなたは、これらの権限は必要ありません。

<uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" /> 

<uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" /> 

<uses-permission android:name="android.permission.CONTROL_LOCATION_UPDATES" /> 
+0

こんにちはブラザー、私はあなたが提案したものを試しましたが、何も起こっていません:( – Devraj

+0

あなたのonActivityResultメソッドが呼び出されているかどうかを確認するためにログを使用します。またGetLocationLatLongメソッド問題が起きている可能性があります。 –

0

はこれを使用してみてください。私は現在このデバイスを使ってデバイスの現在地を取得しています。

public class GPSHelper { 

private Context mContext; 
// flag for GPS Status 
private boolean isGPSEnabled = false; 
// flag for network status 
private boolean isNetworkEnabled = false; 
private LocationManager locationManager; 
private double latitude; 
private double longitude; 

public GPSHelper(Context context) { 
    mContext = context; 

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

} 

public LatLng getMyLocation() { 
    List<String> providers = locationManager.getProviders(true); 

    Location l = null; 
    for (int i = 0; i < providers.size(); i++) { 
     l = locationManager.getLastKnownLocation(providers.get(i)); 
     if (l != null) 
      break; 
    } 
    if (l != null) { 
     latitude = l.getLatitude(); 
     longitude = l.getLongitude(); 
    } 

    return new LatLng(latitude, longitude); 
} 

public boolean isGPSenabled() { 
    isGPSEnabled = locationManager 
      .isProviderEnabled(LocationManager.GPS_PROVIDER); 

    // getting network status 
    isNetworkEnabled = locationManager 
      .isProviderEnabled(LocationManager.NETWORK_PROVIDER); 

    return (isGPSEnabled || isNetworkEnabled); 
} 

/** 
* Function to get latitude 
*/ 
public double getLatitude() { 
    return latitude; 
} 

/** 
* Function to get longitude 
*/ 
public double getLongitude() { 
    return longitude; 
} 
} 

使用法:

GPSHelper gpsHelper = new GPSHelper(getActivity());//I'm creating this object inside a fragment 
LatLng currentLatLng = gpsHelper.getMyLocation(); 
currentLat = currentLatLng.latitude; 
currentLng = currentLatLng.longitude; 

権限:

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> 
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 
関連する問題