/**
*
*/
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;
}
}
|