从Play商店下载Google Maps无效

时间:2019-10-26 05:40:09

标签: java android google-maps

这是一个公共汽车跟踪应用程序,可从Firebase检索位置坐标并在地图上显示。我设置了谷歌地图,并从控制台获得了api密钥。当我在模拟器中使用它时,它可以工作,但是当我将其上载到Playstore时,它不起作用。

它从MainActivity开始,用户在其中选择公交车号,然后从那里转到显示地图上显示公交车位置的地图活动。从主活动到地图活动的数据是使用意图完成的。

我无法弄清为什么从Playstore下载地图时无法加载地图,因为与模拟器或有线连接的设备配合使用时,地图可以完美运行。

主要活动

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.TextView;
import android.widget.Toast;
import androidx.annotation.NonNull;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;


public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    private
    RadioGroup route;
    public static final String ARG_FROM_MAIN = "arg";
    private FirebaseAuth mAuth;
    private FirebaseDatabase mDatabase = FirebaseDatabase.getInstance();
    private DatabaseReference mDatabaseReference = mDatabase.getReference().child("Locations");
    public String someVariable;
    TextView numberbs;
    Button getLocationBtn;
    private Button btnSignOut;
    Button busb1;
    Button busb2;



    Button busb3;
    Button busb4;
    Button busb5;
    Button busb6;
    Button busb7;
    Button busb8;
    Button busb9;
    Button busb10;
    Button busb11;
    Button busb12;
    Button busb13;
    Button busb14;
    Button busb15;
    Button busb16;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        numberbs = findViewById(R.id.busnotext);
        btnSignOut = findViewById(R.id.signoutbtn);
        getLocationBtn = findViewById(R.id.getLocationBtn);


        numberbs = findViewById(R.id.busnotext);
        busb1 = findViewById(R.id.busbtn1);
        busb2 = findViewById(R.id.busbtn2);
        busb3 = findViewById(R.id.busbtn3);
        busb4 = findViewById(R.id.busbtn4);
        busb5 = findViewById(R.id.busbtn5);
        busb6 = findViewById(R.id.busbtn6);
        busb7 = findViewById(R.id.busbtn7);
        busb8 = findViewById(R.id.bustbtn8);
        busb9 = findViewById(R.id.busbtn9);
        busb10 = findViewById(R.id.busbtn10);
        busb11 = findViewById(R.id.busbtn11);
        busb12 = findViewById(R.id.busbtn12);
        busb13 = findViewById(R.id.busbtn13);
        busb14 = findViewById(R.id.busbtn14);
        busb15 = findViewById(R.id.bustbtn15);
        busb16 = findViewById(R.id.busbtn16);

        busb1.setOnClickListener(this);
        busb2.setOnClickListener(this);
        busb3.setOnClickListener(this);
        busb4.setOnClickListener(this);
        busb5.setOnClickListener(this);
        busb6.setOnClickListener(this);
        busb7.setOnClickListener(this);
        busb8.setOnClickListener(this);
        busb9.setOnClickListener(this);
        busb10.setOnClickListener(this);
        busb11.setOnClickListener(this);
        busb12.setOnClickListener(this);
        busb13.setOnClickListener(this);
        busb14.setOnClickListener(this);
        busb15.setOnClickListener(this);
        busb16.setOnClickListener(this);

        getLocationBtn.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {

                //startService(new Intent(this, MyService.class));
                Intent intent = new Intent(MainActivity.this, MapsActivity.class);
                Bundle bundle = new Bundle();
                bundle.putString("message", someVariable);
                intent.putExtras(bundle);
                startActivity(intent);
            }
        });

       btnSignOut.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                mAuth.signOut();
                //startService(new Intent(this, MyService.class));
                Intent intent = new Intent(MainActivity.this, Login.class);
                startActivity(intent);
            }
        });

/**
        Intent intent = new Intent(MainActivity.this, MapsActivity.class);
        intent.putExtra("Ref", someVariable);
        startActivity(intent);
 */
    }


    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.busbtn1:
               someVariable ="BUS1";
                numberbs.setText("Selected: BUS 1");
                mDatabaseReference = mDatabase.getReference().child("Locations").child("BUS1");
                break;
            case R.id.busbtn2:
                numberbs.setText("Selected: BUS 2");
                someVariable ="BUS2";
                mDatabaseReference = mDatabase.getReference().child("Locations").child("BUS2");
                break;
            case R.id.busbtn3:
                numberbs.setText("Selected: BUS 3");
                someVariable ="BUS3";
                mDatabaseReference = mDatabase.getReference().child("Locations").child("BUS3");
                break;
            case R.id.busbtn4:
                numberbs.setText("Selected: BUS 4");
                someVariable ="BUS4";
                mDatabaseReference = mDatabase.getReference().child("Locations").child("BUS4");
                break;
            case R.id.busbtn5:
                numberbs.setText("Selected: BUS 5");
                someVariable ="BUS5";
                mDatabaseReference = mDatabase.getReference().child("Locations").child("BUS5");
                break;
            case R.id.busbtn6:
                numberbs.setText("Selected: BUS 6");
                someVariable ="BUS6";
                mDatabaseReference = mDatabase.getReference().child("Locations").child("BUS6");
                break;
            case R.id.busbtn7:
                numberbs.setText("Selected: BUS 7");
                someVariable ="BUS7";
                mDatabaseReference = mDatabase.getReference().child("Locations").child("BUS7");
                break;
            case R.id.bustbtn8:
                numberbs.setText("Selected: BUS 8");
                someVariable ="BUS8";
                mDatabaseReference = mDatabase.getReference().child("Locations").child("BUS8");
                break;
            case R.id.busbtn9:
                numberbs.setText("Selected: BUS 9");
                someVariable ="BUS9";
                mDatabaseReference = mDatabase.getReference().child("Locations").child("BUS9");
                break;
            case R.id.busbtn10:
                numberbs.setText("Selected: BUS 10");
                someVariable ="BUS10";
                mDatabaseReference = mDatabase.getReference().child("Locations").child("BUS10");
                break;
            case R.id.busbtn11:
                numberbs.setText("Selected: BUS 11");
                someVariable ="BUS11";
                mDatabaseReference = mDatabase.getReference().child("Locations").child("BUS11");
                break;
            case R.id.busbtn12:
                numberbs.setText("Selected: BUS 12");
                someVariable ="BUS12";
                mDatabaseReference = mDatabase.getReference().child("Locations").child("BUS12");
                break;
            case R.id.busbtn13:
                numberbs.setText("Selected: BUS 13");
                someVariable ="BUS13";
                mDatabaseReference = mDatabase.getReference().child("Locations").child("BUS13");
                break;
            case R.id.busbtn14:
                someVariable ="BUS14";
                numberbs.setText("Selected: BUS 14");
                mDatabaseReference = mDatabase.getReference().child("Locations").child("BUS14");
                break;
            case R.id.bustbtn15:
                numberbs.setText("Selected: BUS 15");
                someVariable ="BUS15";
                mDatabaseReference = mDatabase.getReference().child("Locations").child("BUS15");
                break;
            case R.id.busbtn16:
                numberbs.setText("Selected: BUS 16");
                someVariable ="BUS16";
                mDatabaseReference = mDatabase.getReference().child("Locations").child("BUS16");
                break;
        }
    }

}

MapsActivity

import androidx.fragment.app.FragmentActivity;

import android.content.Intent;
import android.os.Bundle;
import android.os.CountDownTimer;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

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.LatLng;
import com.google.android.gms.maps.model.MarkerOptions;
import com.google.firebase.auth.FirebaseAuth;

import com.google.android.gms.maps.model.BitmapDescriptor;
import com.google.android.gms.maps.model.BitmapDescriptorFactory;
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;
import com.google.firebase.database.annotations.NotNull;


public class MapsActivity extends FragmentActivity implements OnMapReadyCallback, View.OnClickListener {

    private GoogleMap mMap;
    private FirebaseAuth mAuth;
    //String value_latitude = "0";
    // String value_longitue = "0";
    Double longi = 0.0;
    Double lati = 0.0;
    // String message = "BUS1";
    Button Refreshh;
    Double latitude = 0.0;
    Double longitude = 0.0;
    String vali;
    Button Backp;
    TextView BusNO;
    private CountDownTimer timer;


    private FirebaseDatabase mDatabase = FirebaseDatabase.getInstance();
   private DatabaseReference myRef = mDatabase.getReference();

    // private DatabaseReference mDatabaseReference = mDatabase.getReference();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Toast.makeText(getApplicationContext(),"Loading... Please Wait", Toast.LENGTH_LONG).show();
        setContentView(R.layout.activity_maps);
        Backp = findViewById(R.id.backbuttonmap);
        BusNO = findViewById(R.id.busnotext);
        Intent intent = getIntent();

        Bundle bundle = intent.getExtras();
        String str = bundle.getString("message");
        vali = str;
        // 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);
        BusNO.setText(vali);
        timer = new CountDownTimer(10000, 8000) {

            @Override
            public void onTick(long millisUntilFinished) {

            }

            @Override
            public void onFinish() {
                try {
                    timer.start();
                    Toast.makeText(MapsActivity.this, "Refreshing...", Toast.LENGTH_LONG).show();
                    getBussGeo();


                } catch (Exception e) {
                    Log.e("Error", "Error: " + e.toString());
                }
            }
        }.start();

        Backp.setOnClickListener(this);
        Backp.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                Intent intent = new Intent(MapsActivity.this, MainActivity.class);
                timer.cancel();
                startActivity(intent);
            }
        });



    }


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

        /*
        if (mMap != null) {
            LatLng sydney = new LatLng(lati, longi);
            mMap.addMarker(new MarkerOptions().position(sydney).title(vali));
            mMap.moveCamera(CameraUpdateFactory.newLatLng(sydney));
        }
        */
    }

    public void getBussGeo() {
        myRef = mDatabase.getReference().child("Locations").child(vali);
        myRef.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NotNull DataSnapshot dataSnapshot) {

                for (DataSnapshot ds : dataSnapshot.getChildren()) {

                    double latitude = dataSnapshot.child("latitude").getValue(Double.class);
                    double longitude = dataSnapshot.child("longitude").getValue(Double.class);
                    Log.e("Long", "onDataChange: " + longitude);
                    Log.d("lato","onDataChange" + latitude);
                    lati = latitude;
                    longi = longitude;
                    if (lati == 0||longi == 0){
                        Toast.makeText(MapsActivity.this, "BUS NOT ACTIVE!", Toast.LENGTH_SHORT).show();

                    }else {

                        if (mMap != null) {
                            LatLng sydney = new LatLng(lati, longi);
                            mMap.addMarker(new MarkerOptions().position(sydney).title(vali));
                            mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(sydney, 17));
                        }
                    }
                }
            }

            @Override
            public void onCancelled(@NotNull DatabaseError error) {
                // Failed to read value
                Toast.makeText(getApplicationContext(), "Error!!", Toast.LENGTH_SHORT).show();

            }
        });
    }

    @Override
    protected void onStart() {
        super.onStart();
        // The Application has been opened!


    }

    @Override
    protected void onStop() {
        super.onStop();
        // The Application has been closed!
        timer.cancel();
    }

    @Override
    public void onClick(View view) {


    }
}

我认为这是原因,如果是,该如何解决?

Google Maps API Key issue 它将api显示为(调试),是否会影响此版本的发布? 如果在哪里输入发布版本的API密钥?

地图活动XML XML issue?

1 个答案:

答案 0 :(得分:1)

您将css = 'a[href]' # your css goes here elements = driver.find_elements_by_css_selector(css) print(len(elements)) elements = driver.execute_script(""" return [...document.querySelectorAll(arguments[0])] """, css) print(len(elements)) 文件放置在google_map_api.xml文件夹中。将其移至app\src\debug\res文件夹。

如果仍不能解决问题,则您可能尚未在Google地图控制台上添加发布密钥哈希。