📋 作者介绍:友友们好我是进击攻城狮,大二学生党一枚
💖作者主页:进击攻城狮的个人博客主页.进击攻城狮 🔥我和友友们一样喜欢编辑,天天敲代码,沉迷学习,日渐消瘦。很荣幸能向大家分享我的所学,和大家一起进步。如果文章有错误,欢迎在评论区指正。那么开始今天的学习吧!
🎉 支持我:点赞👍+收藏⭐️+留言📝
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可以移动相机,还可以从相册得到拍摄的图片
总结
好了,那么今天的学习就到这里了。友友们觉得不错的可以给个关注,点赞或者收藏哦!感谢各位友友们的支持。以下的代码希望各位大佬们自行检验哦,毕竟亲手操作让记忆更加深刻。