Salut à tous,

Après exécution de mon programme, la boussole fonctionne très bien, mais la flêche en direction du Qibla ne bouge pas lorsque je bouge mon mobile.

Quelqu'un a-t-il une idée ?

Merci.

Code Activity :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
 
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
 
import java.util.ArrayList;
 
public class BringMeBack extends AppCompatActivity {
 
 
    public TextView t1;
    public ImageView image1,image2;
 
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_bring_me_back);
 
        t1 = (TextView) findViewById(R.id.heading);
        image1=(ImageView)findViewById(R.id.imageCompass);
        image2=(ImageView)findViewById(R.id.needle);
 
    new QiblaDirectionCompass(BringMeBack.this,image1,image2,t1,36.327710,6.593405,500);
 
 
    }
}
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
Code Class QiblaDirectionCompass


public class QiblaDirectionCompass extends Service implements SensorEventListener {
    public static ImageView image, arrow;

    // record the compass picture angle turned
    private float currentDegree = 0f;
    private float currentDegreeNeedle = 0f;
    Context context;
    Location userLoc = new Location("service Provider");
    // device sensor manager
    private static SensorManager mSensorManager;
    private Sensor sensor;
    public static TextView tvHeading;




    public QiblaDirectionCompass(Context context, ImageView compass, ImageView needle,
                                 TextView heading, double longi, double lati, double alti) {

        image = compass;
        arrow = needle;


        // TextView that will tell the user what degree is he heading
        tvHeading = heading;
        userLoc.setLongitude(longi);
        userLoc.setLatitude(lati);
        userLoc.setAltitude(alti);

        mSensorManager = (SensorManager) context.getSystemService(SENSOR_SERVICE);
        sensor = mSensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION);
        if (sensor != null) {
            // for the system's orientation sensor registered listeners
            mSensorManager.registerListener(this, sensor, SensorManager.SENSOR_DELAY_GAME);//SensorManager.SENSOR_DELAY_Fastest
        } else {
            Toast.makeText(context, "Not Supported", Toast.LENGTH_SHORT).show();
        }
        // initialize your android device sensor capabilities
        this.context = context;

        onCreate ();
    }
        @Override
        public void onCreate () {
            // TODO Auto-generated method stub
            Toast.makeText(context, "Started", Toast.LENGTH_SHORT).show();
            mSensorManager.registerListener(this, sensor, SensorManager.SENSOR_DELAY_GAME); //SensorManager.SENSOR_DELAY_Fastest
            super.onCreate();
        }

        @Override
        public void onDestroy () {
            mSensorManager.unregisterListener(this);
            Toast.makeText(context, "Destroy", Toast.LENGTH_SHORT).show();

            super.onDestroy();

        }
        @Override
        public void onSensorChanged (SensorEvent sensorEvent){
            float degree=Math.round(sensorEvent.values[0]);
            float head;
            Location destinationLoc = new Location("service Provider");

            destinationLoc.setLatitude(21.422487); //kaaba latitude setting
            destinationLoc.setLongitude(39.826206); //kaaba longitude setting
            float bearTo = userLoc.bearingTo(destinationLoc);

            //bearTo = The angle from true north to the destination location from the point we're your currently standing.(asal image k N se destination taak angle )

            //head = The angle that you've rotated your phone from true north. (jaise image lagi hai wo true north per hai ab phone jitne rotate yani jitna image ka n change hai us ka angle hai ye)


            GeomagneticField geoField = new GeomagneticField(Double.valueOf(userLoc.getLatitude()).floatValue(), Double
                    .valueOf(userLoc.getLongitude()).floatValue(),
                    Double.valueOf(userLoc.getAltitude()).floatValue(),
                    System.currentTimeMillis());
            head = -geoField.getDeclination(); // converts magnetic north into true north

            if (bearTo < 0) {
                bearTo = bearTo + 360;
                //bearTo = -100 + 360  = 260;
            }

//This is where we choose to point it
            float direction = bearTo - head;

// If the direction is smaller than 0, add 360 to get the rotation clockwise.
            if (direction < 0) {
                direction = direction + 360;
            }
            tvHeading.setText("Heading: " + Float.toString(degree) + " degrees");

            RotateAnimation raQibla = new RotateAnimation(currentDegreeNeedle, direction, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
            raQibla.setDuration(210);
            raQibla.setFillAfter(true);

            arrow.startAnimation(raQibla);

            currentDegreeNeedle = direction;

// create a rotation animation (reverse turn degree degrees)
            RotateAnimation ra = new RotateAnimation(currentDegree, -degree, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);

// how long the animation will take place
            ra.setDuration(210);


// set the animation after the end of the reservation status
            ra.setFillAfter(true);

// Start the animation
            image.startAnimation(ra);

            currentDegree = -degree;
        }
        @Override
        public void onAccuracyChanged (Sensor sensor,int i){

        }
        @Nullable
        @Override
        public IBinder onBind (Intent intent){
            return null;
        }
    }