Kiblat.java :  » GPS » kupluk » com » amiral » kupluk » Android Open Source

Android Open Source » GPS » kupluk 
kupluk » com » amiral » kupluk » Kiblat.java
/**
 * 
 */
package com.amiral.kupluk;

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.hardware.SensorListener;
import android.hardware.SensorManager;
import android.location.Criteria;
import android.location.Location;
import android.location.LocationManager;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;

/**
 * @author cipto
 * 
 */

public class Kiblat extends Activity {

  private float arahKiblat = 0;
  private float busur = 0;

  private double lonMasjid;
  private double latMasjid;

  private KiblatView kiblatView;
  private SensorManager sensorManager;
  TextView text;
  View bukaPeta;

  private LocationManager locationManager;

  @Override
  public void onCreate(Bundle bundle) {
    super.onCreate(bundle);
    setContentView(R.layout.kiblat);
/*
    TextView textView = new TextView(this);
    textView.setText("kiblat dapat berjalan dalam mode tidur");

    Toast toast = new Toast(this);
    toast.setView(textView);
    toast.show();
*/
  
    Toast.makeText(getBaseContext(), "kiblat dapat berjalam dalam mode tidur", Toast.LENGTH_SHORT).show();
    // inisialisasi Lokasi
    locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);

    // kriteria penggunaan lokasi
    Criteria criteria = new Criteria();
    criteria.setAccuracy(Criteria.ACCURACY_COARSE);
    criteria.setPowerRequirement(Criteria.POWER_LOW);
    criteria.setBearingRequired(false);
    criteria.setSpeedRequired(false);
    criteria.setCostAllowed(true);

    String provider = locationManager.getBestProvider(criteria, true);
    Location location = locationManager.getLastKnownLocation(provider);

    // latMasjid= location.getLatitude();
    // lonMasjid= location.getLongitude();
    //    
    // float kiblat=(float) segitigaBola(lonMasjid,latMasjid);
    float kiblat = (float) segitigaBola(106.85, -6.166666667);
    setArahKiblat(kiblat);

    kiblatView = (KiblatView) this.findViewById(R.id.arahKiblat);
    text = (TextView) findViewById(R.id.text);

    text.setText("Arah Kiblat dari Utara: " + kiblat + " derajat");
    sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
    updatePerputaran(0, 0);
    //    
    // bukaPeta = findViewById(R.id.cekMap);
    // bukaPeta.setOnClickListener(this);
    Log.d("kupluk", "kiblat: " + getArahKiblat());
    Log.d("kupluk", "Latitude masjid: " + latMasjid + "Longitude Masjid: "
        + lonMasjid);
  }

  private final SensorListener sensorListener = new SensorListener() {
    public void onSensorChanged(int sensor, float[] values) {
      updatePerputaran(values[SensorManager.DATA_X], getArahKiblat());
    }

    public void onAccuracyChanged(int sensor, int accuracy) {
    }
  };

  private void updatePerputaran(float _busur, float _arah) {
    busur = (float) (_busur + (float) (360 - _arah));
    if (kiblatView != null) {
      kiblatView.setBearing(busur);
      kiblatView.invalidate();
    }
  }

  @Override
  protected void onResume() {
    super.onResume();
    sensorManager.registerListener(sensorListener,
        SensorManager.SENSOR_ORIENTATION,
        SensorManager.SENSOR_DELAY_FASTEST);
  }

  @Override
  protected void onStop() {
    sensorManager.unregisterListener(sensorListener);
    super.onStop();
  }

  /**
   * Rumus ini untuk menghitung arah kiblat dari utara. Perhitungan sesuai
   * dengan arah jarum jam. Jika nilai utara ditemukan maka selanjutnya adalah
   * dengan menambah arah utara dengan hasil perhitungan.
   */
  public double segitigaBola(double lngMasjid, double latMasjid) {
    double lngKabah = 39.82616111;
    double latKabah = 21.42250833;
    double lKlM = (lngKabah - lngMasjid);
    double sinLKLM = Math.sin(lKlM * 2.0 * Math.PI / 360);
    double cosLKLM = Math.cos(lKlM * 2.0 * Math.PI / 360);
    double sinLM = Math.sin(latMasjid * 2.0 * Math.PI / 360);
    double cosLM = Math.cos(latMasjid * 2.0 * Math.PI / 360);
    double tanLK = Math.tan(latKabah * 2 * Math.PI / 360);
    double penyebut = (cosLM * tanLK) - sinLM * cosLKLM;

    double kiblat;
    double arah;

    kiblat = Math.atan2(sinLKLM, penyebut) * 180 / Math.PI;
    arah = kiblat < 0 ? kiblat + 360 : kiblat;
    return arah;

  }

  public float getArahKiblat() {
    return arahKiblat;
  }

  public void setArahKiblat(float arahKiblat) {
    this.arahKiblat = arahKiblat;
  }
}
java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.