当前位置:首页 » 《随便一记》 » 正文

Android Studio第14课百度地图,获取相册和拍照

11 人参与  2022年07月21日 17:45  分类 : 《随便一记》  评论

点击全文阅读



? 作者介绍:友友们好我是进击攻城狮,大二学生党一枚
?作者主页:进击攻城狮的个人博客主页.进击攻城狮
?我和友友们一样喜欢编辑,天天敲代码,沉迷学习,日渐消瘦。很荣幸能向大家分享我的所学,和大家一起进步。如果文章有错误,欢迎在评论区指正。那么开始今天的学习吧!
? 支持我:点赞?+收藏⭐️+留言?

Android Studio第14课图片渐进度,播放视频,App打包

一、百度地图1.导包,添加依赖2.在AndroidManifest.xml中获取权限配置3.key值获取4.新建一个DemoApplication类5.xml中配置6.代码展示7.运行效果 二、获取相册和拍照1.导包添加依赖2.在AndroidManifest.xml中获取权限配置3.新建一个GlideEngine类4.运行代码5.效果展示 总结


一、百度地图

1.导包,添加依赖

在build.gradle导包
在这里插入图片描述

在这里插入图片描述

 ndk {            // 设置支持的SO库架构(开发者可以根据需要,选择一个或多个平台的so)            abiFilters "armeabi", "armeabi-v7a", "arm64-v8a", "x86","x86_64"        }  implementation 'com.baidu.lbsyun:BaiduMapSDK_Map:7.4.0'    implementation 'com.baidu.lbsyun:BaiduMapSDK_Search:7.4.0'    implementation 'com.baidu.lbsyun:BaiduMapSDK_Util:7.4.0'    implementation 'com.baidu.lbsyun:BaiduMapSDK_Location_All:9.1.8'    implementation 'com.guolindev.permissionx:permissionx:1.6.4'

2.在AndroidManifest.xml中获取权限配置

    <!-- 访问网络,进行地图相关业务数据请求,包括地图数据,路线规划,POI检索等 -->    <uses-permission android:name="android.permission.INTERNET" />    <!-- 获取网络状态,根据网络状态切换进行数据请求网络转换 -->    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />    <!-- 读取外置存储。如果开发者使用了so动态加载功能并且把so文件放在了外置存储区域,则需要申请该权限,否则不需要 -->    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />    <!-- 写外置存储。如果开发者使用了离线地图,并且数据写在外置存储区域,则需要申请该权限 -->    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />    <!-- 这个权限用于进行网络定位 -->    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />    <!-- 这个权限用于访问GPS定位 -->    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />    <!--具备摄像头-->

还要加入以下两个配置

在这里插入图片描述

 <meta-data            android:name="com.baidu.lbsapi.API_KEY"            android:value="SUbHVf89GM0GAxi0eubyrWExTxvz2GV1" />                    <service android:name="com.baidu.location.f"            android:enabled="true"            android:process=":remote"/>

在这里插入图片描述
其中这个key值的来源及其重要,在百度地图开放平台
拿到这个key值

3.key值获取

进入百度地图开放平台后创建应用
在这里插入图片描述
应用类型选择这个Android SDK
在这里插入图片描述

在控制命令台.android路径下:
keytool -list -v -keystore debug.keystore
密钥口令为android
得到我们需要的SHA1
在这里插入图片描述

在这里插入图片描述
将得到的SHA1和包名(AndroidManifest.xml里面)填上去,就可以得到key值了
在这里插入图片描述

4.新建一个DemoApplication类

package com.hnucm.baidumap;import android.app.Application;import com.baidu.mapapi.CoordType;import com.baidu.mapapi.SDKInitializer;import com.baidu.mapapi.utils.CoordinateConverter;public class DemoApplication extends Application {    @Override    public void onCreate() {        super.onCreate();        //在使用SDK各组件之前初始化context信息,传入ApplicationContext        SDKInitializer.initialize(this);        //自4.3.0起,百度地图SDK所有接口均支持百度坐标和国测局坐标,用此方法设置您使用的坐标类型.        //包括BD09LL和GCJ02两种坐标,默认是BD09LL坐标。        SDKInitializer.setCoordType(CoordType.BD09LL);    }}

5.xml中配置

        <com.baidu.mapapi.map.MapView            android:id="@+id/bmapView"            android:layout_width="match_parent"            android:layout_height="match_parent"            android:clickable="true"            tools:ignore="MissingClass" />

6.代码展示

package com.hnucm.baidumap;import androidx.annotation.NonNull;import androidx.appcompat.app.AppCompatActivity;import android.Manifest;import android.net.Uri;import android.os.Bundle;import android.view.View;import android.widget.ImageView;import android.widget.Toast;import com.baidu.location.BDAbstractLocationListener;import com.baidu.location.BDLocation;import com.baidu.location.LocationClient;import com.baidu.location.LocationClientOption;import com.baidu.mapapi.map.BaiduMap;import com.baidu.mapapi.map.MapStatus;import com.baidu.mapapi.map.MapStatusUpdateFactory;import com.baidu.mapapi.map.MapView;import com.baidu.mapapi.map.MyLocationData;import com.baidu.mapapi.model.LatLng;import com.bumptech.glide.Glide;import com.luck.picture.lib.basic.PictureSelector;import com.luck.picture.lib.config.SelectMimeType;import com.luck.picture.lib.entity.LocalMedia;import com.luck.picture.lib.interfaces.OnResultCallbackListener;import com.permissionx.guolindev.PermissionX;import com.permissionx.guolindev.callback.RequestCallback;import java.io.File;import java.util.ArrayList;import java.util.List;public class MainActivity extends AppCompatActivity {    MapView mapView;    BaiduMap baiduMap;    LocationClient locationClient;    ImageView imageView;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        PermissionX.init(this)                .permissions(Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION)                .request(new RequestCallback() {                    @Override                    public void onResult(boolean allGranted, @NonNull List<String> grantedList, @NonNull List<String> deniedList) {                        if (allGranted) {                            Toast.makeText(MainActivity.this, "All permissions are granted", Toast.LENGTH_LONG).show();                        } else {                            Toast.makeText(MainActivity.this, "These permissions are denied: $deniedList", Toast.LENGTH_LONG).show();                        }                    }                });        mapView = findViewById(R.id.bmapView);        baiduMap = mapView.getMap();        LatLng cenpt = new LatLng(28.199996, 112.982994);        MapStatus.Builder builder = new MapStatus.Builder();        builder.zoom(18)                .target(cenpt);        baiduMap.setMapStatus(MapStatusUpdateFactory.newMapStatus(builder.build()));        baiduMap.setMyLocationEnabled(true);        LocationClient LocationClient = new LocationClient(this);//通过LocationClientOption设置LocationClient相关参数        LocationClientOption option = new LocationClientOption();        option.setOpenGps(true); // 打开gps        option.setCoorType("bd09ll"); // 设置坐标类型        option.setScanSpan(1000);//设置locationClientOption        LocationClient.setLocOption(option);//注册LocationListener监听器        MyLocationListener myLocationListener = new MyLocationListener();        LocationClient.registerLocationListener(myLocationListener);//开启地图定位图层        LocationClient.start();    }    public class MyLocationListener extends BDAbstractLocationListener {        @Override        //location里面有经度和纬度,谷歌总部        public void onReceiveLocation(BDLocation location) {            //mapView 销毁后不在处理新接收的位置            if (location == null || mapView == null) {                return;            }            MyLocationData locData = new MyLocationData.Builder()                    .accuracy(location.getRadius())                    // 此处设置开发者获取到的方向信息,顺时针0-360                    .direction(location.getDirection()).latitude(location.getLatitude())                    .longitude(location.getLongitude()).build();            baiduMap.setMyLocationData(locData);            }       }  }

7.运行效果

在这里插入图片描述

二、获取相册和拍照

1.导包添加依赖

在build.gradle导包

    // PictureSelector basic (Necessary)    implementation 'io.github.lucksiege:pictureselector:v3.0.9'// image compress library (Not necessary)    implementation 'io.github.lucksiege:compress:v3.0.9'// uCrop library (Not necessary)    implementation 'io.github.lucksiege:ucrop:v3.0.9'// simple camerax library (Not necessary)    implementation 'io.github.lucksiege:camerax:v3.0.9'    implementation 'com.github.bumptech.glide:glide:4.13.0'    annotationProcessor 'com.github.bumptech.glide:compiler:4.13.0'

2.在AndroidManifest.xml中获取权限配置

    <queries package="${applicationId}">        <intent>            <action android:name="android.media.action.IMAGE_CAPTURE">            </action>        </intent>        <intent>            <action android:name="android.media.action.ACTION_VIDEO_CAPTURE">            </action>        </intent>    </queries>        android:requestLegacyExternalStorage="true"     <uses-feature android:name="android.hardware.camera.any" />    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />    <uses-permission android:name="android.permission.FOREGROUND_SERVICE" />    <uses-permission android:name="android.permission.RECORD_AUDIO" />    <uses-permission android:name="android.permission.CAMERA" />    <uses-permission android:name="android.permission.INTERNET" />    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />    <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />    <uses-permission android:name="android.permission.VIBRATE" />    <uses-permission android:name="android.permission.READ_PHONE_STATE" />    <uses-permission android:name="android.permission.BLUETOOTH" />    <uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />

3.新建一个GlideEngine类

4.运行代码

package com.hnucm.baidumap;import androidx.annotation.NonNull;import androidx.appcompat.app.AppCompatActivity;import android.Manifest;import android.net.Uri;import android.os.Bundle;import android.view.View;import android.widget.ImageView;import android.widget.Toast;import com.baidu.location.BDAbstractLocationListener;import com.baidu.location.BDLocation;import com.baidu.location.LocationClient;import com.baidu.location.LocationClientOption;import com.baidu.mapapi.map.BaiduMap;import com.baidu.mapapi.map.MapStatus;import com.baidu.mapapi.map.MapStatusUpdateFactory;import com.baidu.mapapi.map.MapView;import com.baidu.mapapi.map.MyLocationData;import com.baidu.mapapi.model.LatLng;import com.bumptech.glide.Glide;import com.luck.picture.lib.basic.PictureSelector;import com.luck.picture.lib.config.SelectMimeType;import com.luck.picture.lib.entity.LocalMedia;import com.luck.picture.lib.interfaces.OnResultCallbackListener;import com.permissionx.guolindev.PermissionX;import com.permissionx.guolindev.callback.RequestCallback;import java.io.File;import java.util.ArrayList;import java.util.List;public class MainActivity extends AppCompatActivity {    MapView mapView;    BaiduMap baiduMap;    LocationClient locationClient;    ImageView imageView;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);         PermissionX.init(this)                .permissions(Manifest.permission.ACCESS_COARSE_LOCATION,Manifest.permission.ACCESS_FINE_LOCATION)                .request(new RequestCallback() {                    @Override                    public void onResult(boolean allGranted, @NonNull List<String> grantedList, @NonNull List<String> deniedList) {                        if (allGranted) {                            Toast.makeText(MainActivity.this, "All permissions are granted", Toast.LENGTH_LONG).show();                        } else {                            Toast.makeText(MainActivity.this, "These permissions are denied: $deniedList", Toast.LENGTH_LONG).show();                        }                    }                });        findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View view) {                //获取相册                PictureSelector.create(MainActivity.this)                        .openGallery(SelectMimeType.ofImage())                        .setImageEngine(com.hnucm.baidumap.GlideEngine.createGlideEngine())                        .forResult(new OnResultCallbackListener<LocalMedia>() {                            @Override                            public void onResult(ArrayList<LocalMedia> result) {                            }                            @Override                            public void onCancel() {                            }                        });                PictureSelector.create(MainActivity.this)                        .openGallery(SelectMimeType.ofImage())                        .setImageEngine(GlideEngine.createGlideEngine())                        .forResult(new OnResultCallbackListener<LocalMedia>() {                            @Override                            public void onResult(ArrayList<LocalMedia> result) {                                Glide.with(MainActivity.this).load(Uri.fromFile(new File(result.get(0).getRealPath()))).into(imageView);                            }                            @Override                            public void onCancel() {                            }                        });            }        });        findViewById(R.id.button2).setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View view) {                //点击拍照                PictureSelector.create(MainActivity.this)                        .openCamera(SelectMimeType.ofImage())                        .forResult(new OnResultCallbackListener<LocalMedia>() {                            @Override                            public void onResult(ArrayList<LocalMedia> result) {                             imageView=   findViewById(R.id.imageView);                                Glide.with(MainActivity.this).load(Uri.fromFile(new File(result.get(0).getRealPath()))).into(imageView);                            }                            @Override                            public void onCancel() {                            }                        });          //  点击拍照                PictureSelector.create(MainActivity.this)                        .openCamera(SelectMimeType.ofImage())                        .forResult(new OnResultCallbackListener<LocalMedia>() {                            @Override                            public void onResult(ArrayList<LocalMedia> result) {                                Glide.with(MainActivity.this).load(Uri.fromFile(new File(result.get(0).getRealPath()))).into(imageView);                            }                            @Override                            public void onCancel() {                            }                        });            }        });    }}

5.效果展示

在这里插入图片描述
按住shift可以移动相机,还可以从相册得到拍摄的图片

总结

好了,那么今天的学习就到这里了。友友们觉得不错的可以给个关注,点赞或者收藏哦!感谢各位友友们的支持。以下的代码希望各位大佬们自行检验哦,毕竟亲手操作让记忆更加深刻。


点击全文阅读


本文链接:http://zhangshiyu.com/post/43654.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

关于我们 | 我要投稿 | 免责申明

Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1