如何在点击事件上使用 onchangelocation?

Posted

技术标签:

【中文标题】如何在点击事件上使用 onchangelocation?【英文标题】:How I can use onchangelocation on click event? 【发布时间】:2016-11-27 10:29:49 【问题描述】:

这是我的课:

protected void onCreate(final Bundle savedInstanceState) 

    @Override
    public void onPause() 
        super.onPause();

        //stop location updates when Activity is no longer active
        if (mGoogleApiClient != null) 
            LocationServices.FusedLocationApi.removeLocationUpdates(mGoogleApiClient, this);
        
    

    @Override
    public void onMapReady(GoogleMap googleMap) 
        mMap = googleMap;



        //mGoogleMap.setMapType(GoogleMap.MAP_TYPE_HYBRID);

        //Initialize Google Play Services
        if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) 
            if (ContextCompat.checkSelfPermission(this,
                    Manifest.permission.ACCESS_FINE_LOCATION)
                    == PackageManager.PERMISSION_GRANTED) 
                //Location Permission already granted
                buildGoogleApiClient();
                mMap.setMyLocationEnabled(true);
             else 
                //Request Location Permission
                checkLocationPermission();
            
        
        else 
            buildGoogleApiClient();
            mMap.setMyLocationEnabled(true);
        
    

    protected synchronized void buildGoogleApiClient() 
        mGoogleApiClient = new GoogleApiClient.Builder(this)
                .addConnectionCallbacks(this)
                .addOnConnectionFailedListener(this)
                .addApi(LocationServices.API)
                .build();
        mGoogleApiClient.connect();




        if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, 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;
        
       /* mMap.setMyLocationEnabled(true);*/


    

    @Override
    public void onConnected(Bundle bundle) 
        mLocationRequest = new LocationRequest();
        mLocationRequest.setInterval(1000);
        mLocationRequest.setFastestInterval(1000);
        mLocationRequest.setPriority(LocationRequest.PRIORITY_BALANCED_POWER_ACCURACY);
        if (ContextCompat.checkSelfPermission(this,
                Manifest.permission.ACCESS_FINE_LOCATION)
                == PackageManager.PERMISSION_GRANTED) 
            LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient, mLocationRequest, this);
        
    


    @Override
    public void onLocationChanged(Location location)
    
        mLastLocation = location;
        if (mCurrLocationMarker != null) 
            mCurrLocationMarker.remove();
        

        //Place current location marker
        LatLng latLng = new LatLng(location.getLatitude(), location.getLongitude());
        MarkerOptions markerOptions = new MarkerOptions();
        markerOptions.position(latLng);
        markerOptions.title("Current Position");
        markerOptions.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_MAGENTA));
        mCurrLocationMarker = mMap.addMarker(markerOptions);

        CircleOptions addCircle = new CircleOptions().center(latLng).radius(radiusInMeters).fillColor(shadeColor).strokeColor(strokeColor).strokeWidth(8);
        mCircle = mMap.addCircle(addCircle);

        //move map camera
        mMap.moveCamera(CameraUpdateFactory.newLatLng(latLng));
        mMap.animateCamera(CameraUpdateFactory.zoomTo(11));

        //stop location updates
        if (mGoogleApiClient != null) 
            LocationServices.FusedLocationApi.removeLocationUpdates(mGoogleApiClient, this);
        
    

    public static final int MY_PERMISSIONS_REQUEST_LOCATION = 99;
    private void checkLocationPermission() 
        if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION)
                != PackageManager.PERMISSION_GRANTED) 

            // Should we show an explanation?
            if (ActivityCompat.shouldShowRequestPermissionRationale(this,
                    Manifest.permission.ACCESS_FINE_LOCATION)) 

                // Show an explanation to the user *asynchronously* -- don't block
                // this thread waiting for the user's response! After the user
                // sees the explanation, try again to request the permission.
                new AlertDialog.Builder(this)
                        .setTitle("Location Permission Needed")
                        .setMessage("This app needs the Location permission, please accept to use location functionality")
                        .setPositiveButton("OK", new DialogInterface.OnClickListener() 
                            @Override
                            public void onClick(DialogInterface dialogInterface, int i) 
                                //Prompt the user once explanation has been shown
                                ActivityCompat.requestPermissions(MapsActivity.this,
                                        new String[]Manifest.permission.ACCESS_FINE_LOCATION,
                                        MY_PERMISSIONS_REQUEST_LOCATION );
                            
                        )
                        .create()
                        .show();


             else 
                // No explanation needed, we can request the permission.
                ActivityCompat.requestPermissions(this,
                        new String[]Manifest.permission.ACCESS_FINE_LOCATION,
                        MY_PERMISSIONS_REQUEST_LOCATION );
            
        
    

    @Override
    public void onRequestPermissionsResult(int requestCode,
                                           String permissions[], int[] grantResults) 
        switch (requestCode) 
            case MY_PERMISSIONS_REQUEST_LOCATION: 
                // If request is cancelled, the result arrays are empty.
                if (grantResults.length > 0
                        && grantResults[0] == PackageManager.PERMISSION_GRANTED) 

                    // permission was granted, yay! Do the
                    // location-related task you need to do.
                    if (ContextCompat.checkSelfPermission(this,
                            Manifest.permission.ACCESS_FINE_LOCATION)
                            == PackageManager.PERMISSION_GRANTED) 

                        if (mGoogleApiClient == null) 
                            buildGoogleApiClient();
                        
                        mMap.setMyLocationEnabled(true);
                    

                 else 

                    // permission denied, boo! Disable the
                    // functionality that depends on this permission.
                    Toast.makeText(this, "permission denied", Toast.LENGTH_LONG).show();
                
                return;
            

            // other 'case' lines to check for other
            // permissions this app might request
        
    

  private void sendRequest() 


      for (int j = 0; j < sarr.length; j++) 


            //* if (!sarr[j].contentEquals(origin)) *//*
            finlat2 = darrlat[j];
            finlon2 = darrlon[j];
            double distance = findDistance(finlat1, finlon1, finlat2, finlon2) * 1000;

            //*   if (distance <= 100.00) *//*

            LatLng venus = new LatLng(finlat2, finlon2);
            Log.wtf("venus:", String.valueOf(venus));
            mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(venus, 18));
            originMarkers.add(mMap.addMarker(new MarkerOptions()
                    .icon(BitmapDescriptorFactory.fromResource(R.drawable.mark))
                    .title(sarr[j])
                    .position(venus)));
        

        return;

    

我想使用 onchangelocation 工作,当我单击任何按钮时。单击按钮后,将绘制以当前位置为中心的圆圈。如何在谷歌地图的单击事件中处理 onchangelocation? 提前致谢

【问题讨论】:

【参考方案1】:

尝试使用LocationListener:

"用于接收来自 LocationManager 的通知,当 位置变了。如果 LocationListener 调用这些方法 已使用 requestLocationUpdates(String, long, float, LocationListener) 方法。""

对于实际代码,请尝试SO thread 中的演示。

【讨论】:

以上是关于如何在点击事件上使用 onchangelocation?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用列表在每个上下文菜单项上添加点击事件?

如何在Android应用里屏蔽鼠标点击事件

如何在 UIWebView 上模拟点击事件?

如何在 Windows 通知上收听点击事件?

如何在集群中的谷歌地图标记上创建点击事件?

如何在UILable上添加点击事件