Java 如何在多部手机上运行相同的Android应用程序?

Java 如何在多部手机上运行相同的Android应用程序?,java,android,location,sharedpreferences,Java,Android,Location,Sharedpreferences,我不确定问题的标题是否正确,但这是我的问题。 我有一个注册和登录的应用程序。根据用户的登录情况,用户具有不同的功能。所有用户登录后都会被引导到MapsActivity.java。我正在区分那里的用户,并相应地设置显示 我想要的是,如果用户以xyz@gmail.com,其他用户应能够看到该用户的位置。它在一部手机上工作。当我以身份登录时xyz@gmail.com,该位置存储在SharedReferences中,并在我以其他用户身份登录同一部手机时检索 但是当我以xyz@gmail.com从另一部手

我不确定问题的标题是否正确,但这是我的问题。 我有一个注册和登录的应用程序。根据用户的登录情况,用户具有不同的功能。所有用户登录后都会被引导到MapsActivity.java。我正在区分那里的用户,并相应地设置显示

我想要的是,如果用户以xyz@gmail.com,其他用户应能够看到该用户的位置。它在一部手机上工作。当我以身份登录时xyz@gmail.com,该位置存储在SharedReferences中,并在我以其他用户身份登录同一部手机时检索

但是当我以xyz@gmail.com从另一部手机以其他用户身份从另一部手机登录(2部手机-2个用户),手机之间没有连接。这个xyz@gmail.com在另一部电话上看不到位置

那么我做错了什么?如何在两部手机上同时运行相同的应用程序

希望你能理解我的问题。下面是我的MapsActivity.java,以进一步澄清我的问题

多谢各位

public class MapsActivity extends FragmentActivity implements OnMapReadyCallback {

    private GoogleMap mMap;
    private LocationManager locationManager;
    private LocationListener locationListener;
    private Marker mLocationMarker;
    public FirebaseUser user;
    public Circle circle;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_maps);
        SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
                .findFragmentById(R.id.map);
        mapFragment.getMapAsync(this);

        user = FirebaseAuth.getInstance().getCurrentUser();

        if(!user.getEmail().equalsIgnoreCase("xyz@gmail.com"))
        {

            locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
            if (ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
                // TODO: Consider calling
                //    ActivityCompat#requestPermissions
                // here to request the missing permissions, and then overriding
                //   public void onRequestPermissionsResult(int requestCode, String[] permissions,
                //                                          int[] grantResults)
                // to handle the case where the user grants the permission. See the documentation
                // for ActivityCompat#requestPermissions for more details.
                return;
            }
            if (locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)) {

                locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, new android.location.LocationListener() {
                    @Override
                    public void onLocationChanged(Location location) {
                        double latitude = location.getLatitude();
                        double longitude = location.getLongitude();
                        LatLng latLng = new LatLng(latitude, longitude);

                        if(mLocationMarker != null)
                        {
                            mLocationMarker.remove();
                        }

                        if(circle != null)
                        {
                            circle.remove();
                        }

                        circle = mMap.addCircle(new CircleOptions().center(latLng).radius(15).strokeColor(Color.BLUE).fillColor(Color.BLUE));

                        SharedPreferences sp = getSharedPreferences("MapsActivity.java", MODE_PRIVATE);

                        Double la = Double.longBitsToDouble(sp.getLong("la", Double.doubleToLongBits(-1)));
                        Double lo = Double.longBitsToDouble(sp.getLong("lo", Double.doubleToLongBits(-1)));

                        mLocationMarker = mMap.addMarker(new MarkerOptions().position(new LatLng(la, lo)));

                        mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(latLng, 14), 1500, null);
                    }

                    @Override
                    public void onStatusChanged(String provider, int status, Bundle extras) {

                    }

                    @Override
                    public void onProviderEnabled(String provider) {

                    }

                    @Override
                    public void onProviderDisabled(String provider) {

                    }
                });
            }

            else if(locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)){
                locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, new android.location.LocationListener() {
                    @Override
                    public void onLocationChanged(Location location) {
                        double latitude = location.getLatitude();
                        double longitude = location.getLongitude();
                        LatLng latLng = new LatLng(latitude, longitude);

                        if(mLocationMarker != null)
                        {
                            mLocationMarker.remove();
                        }

                        if(circle != null)
                        {
                            circle.remove();
                        }

                        circle = mMap.addCircle(new CircleOptions().center(latLng).radius(15).strokeColor(Color.BLUE).fillColor(Color.BLUE));

                        SharedPreferences sp = getSharedPreferences("MapsActivity.java", MODE_PRIVATE);

                        Double la = Double.longBitsToDouble(sp.getLong("la", Double.doubleToLongBits(-1)));
                        Double lo = Double.longBitsToDouble(sp.getLong("lo", Double.doubleToLongBits(-1)));

                        mLocationMarker = mMap.addMarker(new MarkerOptions().position(new LatLng(la, lo)));
                                          mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(latLng, 14), 1500, null);
                    }

                    @Override
                    public void onStatusChanged(String provider, int status, Bundle extras) {

                    }

                    @Override
                    public void onProviderEnabled(String provider) {

                    }

                    @Override
                    public void onProviderDisabled(String provider) {

                    }
                });
            }
        }
        else
        {
            locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
            if (ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
                // TODO: Consider calling
                //    ActivityCompat#requestPermissions
                // here to request the missing permissions, and then overriding
                //   public void onRequestPermissionsResult(int requestCode, String[] permissions,
                //                                          int[] grantResults)
                // to handle the case where the user grants the permission. See the documentation
                // for ActivityCompat#requestPermissions for more details.
                return;
            }
            if (locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)) {

                locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, new android.location.LocationListener() {
                    @Override
                    public void onLocationChanged(Location location) {

                        double lat = location.getLatitude();
                        double lon = location.getLongitude();
                        LatLng lolo = new LatLng(lat, lon);

                        if(mLocationMarker != null)
                        {
                            mLocationMarker.remove();
                        }
                        mLocationMarker = mMap.addMarker(new MarkerOptions().position(lolo));

                        mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(lolo, 14), 1500, null);

                        SharedPreferences sp = getSharedPreferences("MapsActivity.java", MODE_PRIVATE);
                        SharedPreferences.Editor edit = sp.edit();
                        edit.putLong("la", Double.doubleToLongBits(lat));
                        edit.putLong("lo", Double.doubleToLongBits(lon));
                        edit.apply();
                    }

                    @Override
                    public void onStatusChanged(String provider, int status, Bundle extras) {

                    }

                    @Override
                    public void onProviderEnabled(String provider) {

                    }

                    @Override
                    public void onProviderDisabled(String provider) {

                    }
                });
            }

            else if(locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)){
                locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, new android.location.LocationListener() {
                    @Override
                    public void onLocationChanged(Location location) {

                        double lat = location.getLatitude();
                        double lon = location.getLongitude();
                        LatLng lolo = new LatLng(lat, lon);

                        if(mLocationMarker != null)
                        {
                            mLocationMarker.remove();
                        }
                        mLocationMarker = mMap.addMarker(new MarkerOptions().position(lolo));

                        mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(lolo, 14), 1500, null);

                        SharedPreferences sp = getSharedPreferences("MapsActivity.java", MODE_PRIVATE);
                        SharedPreferences.Editor edit = sp.edit();
                        edit.putLong("la", Double.doubleToLongBits(lat));
                        edit.putLong("lo", Double.doubleToLongBits(lon));
                        edit.apply();
                    }

                    @Override
                    public void onStatusChanged(String provider, int status, Bundle extras) {

                    }

                    @Override
                    public void onProviderEnabled(String provider) {

                    }

                    @Override
                    public void onProviderDisabled(String provider) {

                    }
                });
            }

        }
    }





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

    }
}

我看到您已经有了一个
FirebaseUser
对象;因此,请写入Firebase数据库而不是SharedReferences,以便其他设备上的其他用户可以共享数据。我考虑过这一点,但user.getEmail()、displayName和photoURL是唯一可能的。即使我创建了具有纬度和经度的用户,我也无法执行user.setLatitute(lat);:'(如果您使用用户名作为密钥,我想可能会回答您的问题。非常感谢!这很有帮助!:')