亚洲国产爱久久全部精品_日韩有码在线播放_国产欧美在线观看_中文字幕不卡在线观看

Android顯示當前位置的Google地圖含代碼

Android顯示當前位置的Google地圖

在之前的Android Google地圖教程中,我們只是顯示了由MapsActivity.java類文件設置的默認坐標(位置)。愛掏網 - it200.com

現在在這個教程中,我們將顯示并在用戶當前位置放置標記。愛掏網 - it200.com要做到這一點,我們需要生成Google地圖API密鑰。愛掏網 - it200.com生成Google地圖API的過程在Android Google地圖教程中有詳述。愛掏網 - it200.com

要顯示用戶當前位置,我們需要實現一些接口和回調方法。愛掏網 - it200.com

  1. OnMapRreadyCallback: 當該接口實例被設置在MapFragment對象上時,將調用此回調接口。愛掏網 - it200.com OnMapReadyCallback接口的onMapReady(GoogleMap)方法在地圖準備好使用時被調用。愛掏網 - it200.com在onMapReady(GoogleMap)方法中,我們可以添加標記,監聽器和其他屬性。愛掏網 - it200.com
  2. LocationListener: 該接口用于接收設備位置發生更改時的通知。愛掏網 - it200.com當位置發生變化時,會調用LocationListener的onLocationChanged(Location)方法。愛掏網 - it200.com
  3. GoogleApiClient.ConnectionCallbacks: 此接口提供了onConnected(Bundle)和onConnectionSuspended(int)的回調方法,當設備連接和斷開連接時會調用這些方法。愛掏網 - it200.com
  4. GoogleApiClient.OnConnectionFailedListener: 此接口提供了onConnectionFailed(ConnectionResult)的回調方法,當連接設備與服務時發生錯誤時會調用該方法。愛掏網 - it200.com

GoogleMap的 setMyLocationEnabled() 方法用于啟用位置圖層,允許設備與當前位置進行交互。愛掏網 - it200.com

顯示當前位置的Google地圖示例

讓我們看一個顯示設備當前位置的Google地圖示例。愛掏網 - it200.com

activity_maps.xml

在activity_maps.xml文件中,在片段中添加SupportMapFragment。愛掏網 - it200.com

<fragment xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:map="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/map"
    android:name="com.google.android.gms.maps.SupportMapFragment"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="example.com.mapexample.MapsActivity" />

build.gradel

在 build.gradel 文件中添加以下依賴項。愛掏網 - it200.com

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'com.android.support:appcompat-v7:26.1.0'
    implementation 'com.google.android.gms:play-services-maps:11.8.0'
    compile 'com.google.android.gms:play-services-location:11.8.0'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.1'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1'

}

MapsActivity.java

在MapsActivity.java文件中添加以下代碼。愛掏網 - it200.com

package example.com.mapexample;


import android.os.Build;
import android.support.v4.app.FragmentActivity;
import android.os.Bundle;

import com.google.android.gms.common.api.GoogleApiClient;
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.Marker;
import com.google.android.gms.maps.model.MarkerOptions;
import com.google.android.gms.location.LocationServices;

import android.location.Location;
import android.Manifest;
import android.content.pm.PackageManager;
import android.support.v4.content.ContextCompat;
import com.google.android.gms.common.ConnectionResult;
import com.google.android.gms.location.LocationListener;
import com.google.android.gms.location.LocationRequest;


public class MapsActivity extends FragmentActivity implements OnMapReadyCallback,
        LocationListener,GoogleApiClient.ConnectionCallbacks,
        GoogleApiClient.OnConnectionFailedListener{

    private GoogleMap mMap;
    Location mLastLocation;
    Marker mCurrLocationMarker;
    GoogleApiClient mGoogleApiClient;
    LocationRequest mLocationRequest;

    @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);

    }

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

        if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            if (ContextCompat.checkSelfPermission(this,
                    Manifest.permission.ACCESS_FINE_LOCATION)
                    == PackageManager.PERMISSION_GRANTED) {
                buildGoogleApiClient();
                mMap.setMyLocationEnabled(true);
            }
        }
        else {
            buildGoogleApiClient();
            mMap.setMyLocationEnabled(true);
        }

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

    @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 onConnectionSuspended(int i) {

    }

    @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_GREEN));
        mCurrLocationMarker = mMap.addMarker(markerOptions);

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

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

    }

    @Override
    public void onConnectionFailed(ConnectionResult connectionResult) {

    }

}

請求運行時權限

需要Android 6.0(Marshmallow)或更高版本的Android設備在運行時訪問設備功能時需要一些權限。愛掏網 - it200.com

在上面的MapsActivity.java文件中,我們添加了一個運行時權限 Manifest.permission.ACCESS_FINE_LOCATION 用于請求訪問設備位置。愛掏網 - it200.com運行時權限使用 checkSelfPermission() 方法進行檢查,返回 PackageManager.PERMISSION_GRANTED 或 PackageManager.PERMISSION_DENIED 。愛掏網 - it200.com如果權限被授予,則應用程序繼續操作。愛掏網 - it200.com

AndroidManifest.xml中需要的權限

在AndroidManifest.xml文件中添加以下用戶權限。愛掏網 - it200.com

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

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="example.com.mapexample">
    <!--
         The ACCESS_COARSE/FINE_LOCATION permissions are not required to use
         Google Maps Android API v2, but you must specify either coarse or fine
         location permissions for the 'MyLocation' functionality. 
    -->
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.INTERNET" />


    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <!--
             The API key for Google Maps-based APIs is defined as a string resource.
             (See the file "res/values/google_maps_api.xml").
             Note that the API key is linked to the encryption key used to sign the APK.
             You need a different API key for each encryption key, including the release key that is used to
             sign the APK for publishing.
             You can define the keys for the debug and release targets in src/debug/ and src/release/. 
        -->
        <meta-data
            android:name="com.google.android.geo.API_KEY"
            android:value="@string/google_maps_key" />

        <activity
            android:name=".MapsActivity"
            android:label="@string/title_activity_maps">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

輸出

聲明:所有內容來自互聯網搜索結果,不保證100%準確性,僅供參考。如若本站內容侵犯了原著者的合法權益,可聯系我們進行處理。
發表評論
更多 網友評論0 條評論)
暫無評論

返回頂部

亚洲国产爱久久全部精品_日韩有码在线播放_国产欧美在线观看_中文字幕不卡在线观看

    
    

    亚洲欧美在线播放| 亚洲欧洲视频| 欧美日韩国产页| 在线视频欧美精品| 狠狠色丁香久久婷婷综合丁香| 欧美va亚洲va日韩∨a综合色| 亚洲无亚洲人成网站77777 | 亚洲国产日韩一区二区| 欧美日韩一区在线播放| 免费成人黄色| 久热精品视频在线观看| 西西人体一区二区| 亚洲午夜激情网站| 亚洲视频在线免费观看| 亚洲国产精品成人一区二区 | 在线观看欧美日韩| 亚洲午夜视频在线| 国产精品久久久久久久午夜片 | 欧美电影免费观看高清完整版| 亚洲香蕉在线观看| 亚洲系列中文字幕| 亚洲精选视频在线| 亚洲欧美电影院| 亚洲国产精品123| 欧美高清hd18日本| 久久人人爽人人爽| 久久在线免费观看视频| 亚洲欧美大片| 欧美mv日韩mv国产网站app| 香蕉久久国产| 久久成人精品电影| 久久精品国产一区二区三| 欧美一级片久久久久久久| 一区二区激情| 亚洲线精品一区二区三区八戒| 99视频热这里只有精品免费| 中文在线资源观看网站视频免费不卡| 91久久精品国产91久久性色tv | 欧美日韩三级| 欧美日韩一区二区在线视频| 欧美麻豆久久久久久中文| 欧美精品激情在线观看| 欧美午夜www高清视频| 国产精品久久久久久久久果冻传媒 | 久久精品国产久精国产思思| 久久精品国产99国产精品| 久久国产精品99久久久久久老狼| 亚洲香蕉成视频在线观看| 亚洲在线观看免费| 欧美一区二区三区四区高清 | 国产精品爽黄69| 国产主播精品在线| 亚洲黄色成人久久久| 一区二区欧美亚洲| 先锋影音国产一区| 久久综合久久综合九色| 欧美精品三级在线观看| 国产精品草莓在线免费观看| 欧美视频日韩视频在线观看| 国产精品中文字幕欧美| 性欧美videos另类喷潮| 制服诱惑一区二区| 亚洲成人资源网| 99精品免费| 欧美一站二站| 欧美日韩ab片| 有码中文亚洲精品| 中日韩美女免费视频网址在线观看 | 久久精品国产视频| 欧美激情一二区| 国产小视频国产精品| 亚洲品质自拍| 欧美自拍丝袜亚洲| 欧美日韩国产首页| 一区二区视频免费在线观看| 99视频日韩| 久久久久在线观看| 久久中文久久字幕| 国产女精品视频网站免费| 亚洲美女一区| 免费欧美高清视频| 一色屋精品视频免费看| 亚洲人成在线影院| 久久香蕉国产线看观看av| 欧美午夜美女看片| 亚洲精品国产精品国自产在线| 午夜精品网站| 国产精品成人观看视频免费| 亚洲风情在线资源站| 久久久久久穴| 国产一区二区中文| 欧美影院久久久| 国产精品wwwwww| 亚洲香蕉在线观看| 国产精品久久波多野结衣| 亚洲精品免费一二三区| 欧美成人资源| 亚洲三级影片| 欧美精品福利在线| 亚洲精品一级| 欧美色欧美亚洲另类二区| 亚洲片在线资源| 欧美精品三区| 一区二区三区高清不卡| 欧美激情va永久在线播放| 亚洲国产欧美一区二区三区丁香婷| 久久综合999| 在线观看亚洲一区| 久久综合图片| 日韩亚洲视频在线| 国产精品成人观看视频免费| 中日韩午夜理伦电影免费| 欧美日韩直播| 亚洲免费视频一区二区| 国产日产高清欧美一区二区三区| 欧美一级视频免费在线观看| 国产精品视频精品视频| 久久国内精品视频| 亚洲国产精品成人久久综合一区| 久久久99久久精品女同性| 欧美麻豆久久久久久中文| 一区二区日韩伦理片| 亚洲欧美日韩一区在线| 久久久www成人免费无遮挡大片 | 欧美a级一区二区| 国产精品久久久久久久久婷婷| 一区免费观看视频| 国产欧美精品一区二区色综合 | 99精品国产99久久久久久福利| 免费看成人av| 国产精品欧美激情| 影音先锋另类| 99精品福利视频| 欧美喷潮久久久xxxxx| 在线观看欧美日韩国产| 久久久久久久久伊人| 国产麻豆9l精品三级站| 一本久道综合久久精品| 欧美精品 日韩| 一本大道久久a久久精二百| 欧美a级片网| 亚洲国产精品电影| 欧美三级乱码| 久久久久一区二区三区| 一区二区三区色| 亚洲第一搞黄网站| 国产伦理一区| 欧美日韩一区成人| 香蕉成人伊视频在线观看| 午夜一区二区三区在线观看 | 99在线精品免费视频九九视| 国产日韩一级二级三级| 免费不卡在线观看| 久久不射中文字幕| 亚洲自拍偷拍视频| 在线视频欧美日韩精品| 在线欧美影院| 极品尤物av久久免费看| 国产日韩欧美另类| 国产精品美女黄网| 欧美日韩蜜桃| 欧美日韩不卡合集视频| 欧美www视频在线观看| 国产精品永久入口久久久| 欧美成人国产va精品日本一级| 亚洲看片网站| 1024亚洲| 在线观看国产日韩| 黄色小说综合网站| 国自产拍偷拍福利精品免费一| 国产精品福利在线观看| 欧美日韩国产大片| 欧美日韩www| 欧美日韩和欧美的一区二区| 欧美成人免费全部观看天天性色| 猛干欧美女孩| 久久综合久久综合这里只有精品| 久久精品欧美日韩| 久久国产精品久久久久久电车| 欧美影片第一页| 久久久久国色av免费看影院| 老司机午夜精品| 欧美激情欧美激情在线五月| 欧美精品在线免费观看| 欧美久久婷婷综合色| 欧美色图天堂网| 国产精品一区二区久久| 国产一区清纯| 最新中文字幕一区二区三区| 日韩网站免费观看| 午夜精品一区二区三区在线| 久久久久久久一区二区| 可以看av的网站久久看| 欧美精品成人| 国产精品一区二区三区久久久| 国产一区日韩一区| 亚洲人成在线播放| 亚洲欧美中文另类| 老**午夜毛片一区二区三区| 欧美日韩黄色一区二区|