تطبيق كيتبع مسار الحافلة بأندرويد الجزء الثاني

فهاد الجزء الثاني من تطبيق كيتبع مسارالحافلة بأندرويد غادي نزيدو التطبيق الثاني الخاص بالمستخدم لي كيمكنوا من الإطلاع على موقع الحافلة فالخريطة من بعد ميسترجع الموقع من قاعدة البيانات ف firebase وغادي نشوفوا ايضا كيفاش نعرضوا الموقع على شكل icon ديال حافلة.

نظرة سريعة بالفيديو


1- الملف activity_main.xml


فأول حاجة غادي نديرو غادي نزيدو project جديد ف android studio ختار Basic Activity سميه ClientBusApp من بعد ميتزاد غادي تمشي للمجلد res/layout فيه كاين ملف activity_main.xml هادا هو الملف ديال الصفحة الرئيسية ديالنا فيه الكود لي فيه textview غادي يكون فيها longitude وlatitude ديال الحافلة وال bouton لي غادي يمكن من مشاهدة الموقع على الخريطة ولي ملي كيكليكي عليها كتنفد ل fonction showMap الكود ديال activity_main.xml هو :

                                    
                                        <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.example.belasri.clientbusapp.MainActivity">

    <TextView
        android:id="@+id/posText"
        android:textAlignment="center"
        android:text="position"
        android:padding="20dp"
        android:textSize="16sp"
        android:layout_width="match_parent"
        android:layout_height="60dp"
        />
    <Button
        android:id="@+id/btn"
        android:onClick="showMap"
        android:text="Voir sur carte"
        android:layout_width="match_parent"
        android:layout_height="60dp"
        />

</LinearLayout>
                                    
                                

2- MainActivity.java


فالمجلد java كاين الملف MainActivity.java  فيه كنسترجع ال textview لي زدنا ف activity_main.xml منبعد  كنخدم ب firebase database باش كنسترجع ل base de données locations لي زدنا ففاش تزيد ل app ف firebase اختار ل app لي زدنا قبل لي هي BusDriverApp من بعد عندي ل fonction showMap لي كترسل ل position لي استرجعنا من la base لل MapsActivity لي غادي نزيدو من بعد الكود ديال الملف هو: 

                                    
                                        package com.example.belasri.clientbusapp;

import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.ValueEventListener;

public class MainActivity extends AppCompatActivity {
    private TextView mPosition;
    private FirebaseDatabase mDatabase;
    private DatabaseReference mRef;
    private Button showBtn;
    String position;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mPosition = (TextView) findViewById(R.id.posText);
        mDatabase = FirebaseDatabase.getInstance();
        mRef = mDatabase.getReference("locations");
        showBtn = (Button) findViewById(R.id.btn);
        mRef.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                position = dataSnapshot.getValue(String.class);
                mPosition.setText(position);
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });
    }
    public void showMap(View v){
        Intent mapIntent = new Intent (MainActivity.this,MapsActivity.class);
        mapIntent.putExtra("position",position);
        Log.d("positionseparated",position.toString());
        startActivity(mapIntent);
    }
}
                                    
                                

3- MapsActivity.java


فالمجلد java كنزيد Activity جديدة اختار MapsActivity   فيه كنسترجع ال position  لي جاتنا من MainActivity.java منبعد كنقسمها ل longitude و latitude وكنحولهم ل double منبعد كنخدم بهم فل fonction onMapReady كن créer l'objet من la classe LatLng كنعطيها longitude و latitude  منبعد كن créer ل marker لي كيحدد ل position منبعد كنزيدو لل map وكنحدد zoom فأخر حاجة لي مهمة هنا هي ل clé باش تخدم ب google maps فيلا بغيتي تاخد clé ديالك يمكنلك تشوف الدروس السابقة فيها راني شارح كيفاش بغيتي تخدم بديالي خدم به ولكن راه مؤقت لهاد الدرس فقط الكود ديال الملف هو :

                                      
                                        package com.example.belasri.clientbusapp;

import android.support.v4.app.FragmentActivity;
import android.os.Bundle;
import android.util.Log;

import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.OnMapReadyCallback;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.BitmapDescriptorFactory;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.MarkerOptions;

public class MapsActivity extends FragmentActivity implements OnMapReadyCallback {

    private GoogleMap mMap;
    private String position;
    double posLat,posLong;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_maps);
        // Obtain the SupportMapFragment and get notified when the map is ready to be used.
        SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
                .findFragmentById(R.id.map);
        mapFragment.getMapAsync(this);
        position = getIntent().getExtras().getString("position");
        String [] positionSeparated = position.split(",");
        Log.d("positionseparated",positionSeparated.toString());
        String latPos = positionSeparated[0];
        String longPos = positionSeparated[1];
        posLat = Double.parseDouble(latPos);
        posLong = Double.parseDouble(longPos);
    }


    /**
     * Manipulates the map once available.
     * This callback is triggered when the map is ready to be used.
     * This is where we can add markers or lines, add listeners or move the camera. In this case,
     * we just add a marker near Sydney, Australia.
     * If Google Play services is not installed on the device, the user will be prompted to install
     * it inside the SupportMapFragment. This method will only be triggered once the user has
     * installed Google Play services and returned to the app.
     */
    @Override
    public void onMapReady(GoogleMap googleMap) {
        mMap = googleMap;

        // Add a marker in Sydney and move the camera
        LatLng location = new LatLng(posLat,posLong);
        MarkerOptions marker = new MarkerOptions().position(location).title("Bus ligne 30");
        marker.icon(BitmapDescriptorFactory.fromResource(R.drawable.bus));
        mMap.addMarker(marker);
        mMap.moveCamera(CameraUpdateFactory.newLatLng(location));
        mMap.animateCamera(CameraUpdateFactory.zoomTo(10));
    }
}
                                      
                                    

4- الملف AndroidManifest.xml


فالملف AndroidManifest.xml كنزيد ل permission باش يمكن لتطبيق يستخدم الأنترنيت :

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

كلمات مفاتيح :