Android调用照相机和百度地图开发,百度地图显示界面覆盖了相机界面,求大神解答?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android调用照相机和百度地图开发,百度地图显示界面覆盖了相机界面,求大神解答?相关的知识,希望对你有一定的参考价值。

android界面如下,当我点击“镜头”按钮时,百度地图的界面遮挡了一部分相机预览界面;当我返回“地图“界面时,百度地图上像截图似的显示还是上一次的图片,求大神帮忙解答!!

android手机有自带的照相机和图库,我们做的项目中有时用到上传图片到服务器,今天做了一个项目用到这个功能,所以把我的代码记录下来和大家分享,有需求的朋友可以参考下

android手机有自带的照相机和图库,我们做的项目中有时用到上传图片到服务器,今天做了一个项目用到这个功能,所以把我的代码记录下来和大家分享,第一次写博客希望各位大神多多批评。

首先上一段调用android相册和相机的代码:

复制代码
代码如下:

Intent intent = new
Intent(MediaStore.ACTION_IMAGE_CAPTURE);//调用android自带的照相机
photoUri =
MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
startActivityForResult(intent,
1);

复制代码
代码如下:

Intent i = new Intent(Intent.ACTION_PICK,

android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);//调用android的图库

startActivityForResult(i, 2);

复制代码
代码如下:

@Override
protected void
onActivityResult(int requestCode, int resultCode, Intent data)

//完成照相后回调用此方法
super.onActivityResult(requestCode, resultCode, data);

case 1:
switch (resultCode)
case Activity.RESULT_OK://照相完成点击确定

String sdStatus = Environment.getExternalStorageState();
if
(!sdStatus.equals(Environment.MEDIA_MOUNTED)) // 检测sd是否可用

Log.v("TestFile", "SD card is not avaiable/writeable right now.");

return;
Bundle bundle = data.getExtras();
Bitmap bitmap = (Bitmap)
bundle.get("data");// 获取相机返回的数据,并转换为Bitmap图片格式
FileOutputStream b = null;

File file = new File("/sdcard/pk4fun/");
file.mkdirs();//
创建文件夹,名称为pk4fun //
照片的命名,目标文件夹下,以当前时间数字串为名称,即可确保每张照片名称不相同。网上流传的其他Demo这里的照片名称都写死了,则会发生无论拍照多少张,后一张总会把前一张照片覆盖。细心的同学还可以设置这个字符串,比如加上“IMG”字样等;然后就会发现sd卡中myimage这个文件夹下,会保存刚刚调用相机拍出来的照片,照片名称不会重复。

String str = null;
Date date = null;
SimpleDateFormat format = new
SimpleDateFormat("yyyyMMddHHmmss");// 获取当前时间,进一步转化为字符串
date = new
Date(resultCode);
str = format.format(date);
String fileName =
"/sdcard/myImage/" + str + ".jpg";
sendBroadcast(fileName);
try
b
= new FileOutputStream(fileName);

bitmap.compress(Bitmap.CompressFormat.JPEG, 100, b);// 把数据写入文件
catch
(FileNotFoundException e)
e.printStackTrace();
finally
try

b.flush();
b.close();
catch (IOException e)

e.printStackTrace();

break;
case Activity.RESULT_CANCELED://
取消
break;

break;
case 2:
switch (resultCode)
case
Activity.RESULT_OK:
Uri uri = data.getData();
Cursor cursor =
mActivity.getContentResolver().query(uri, null,
null, null, null);

cursor.moveToFirst();
String imgNo = cursor.getString(0); // 图片编号

String imgPath = cursor.getString(1); // 图片文件路径
String imgSize =
cursor.getString(2); // 图片大小
String imgName = cursor.getString(3); // 图片文件名

cursor.close();
// Options options = new BitmapFactory.Options();
//
options.inJustDecodeBounds = false;
// options.inSampleSize = 10;
//
Bitmap bitmap = BitmapFactory.decodeFile(imgPath, options);

break;

case Activity.RESULT_CANCELED:// 取消
break;

break;
追问

这又是从哪里粘贴过来的……

参考技术A 那当然是腾讯地图了 腾讯地图有离线地图功能 能在你断网之后正常使用 只要你在有网的时候下载离线地图就可以了 还有3d功能 而且3d功能还有辨别方向的功能
它 就是有指针的,就可以很清楚的分清东西南北的,而且也是可以帮你定位的,很方便灵活,这样你就可以知道自己的具体位置了,即使在陌生的城市也不会迷路,而且也可以帮你查询到很多的路线,还有可以乘坐到达的交通方式等等,都是可以高清实景的显示给你的,你可以试试看吧,希望能帮到你吧,望采纳啊

Android百度地图开发-第一篇:申请搭建百度地图

一、前言

这是第一篇关于Android使用百度地图的学习记录,主要记录:
  1.在百度地图开发者平台上申请API Key。
  2.在自己的应用中加入百度地图的Android版SDK。
  3.在自己的应用中显示一个地图。

二、在百度地图开发者平台上申请API Key

百度地图开发者平台地址:http://lbsyun.baidu.com/index.php?title=%E9%A6%96%E9%A1%B5。点击界面的“申请密钥”,进入界面之后,点击“创建应用”按钮。



将应用类型选择为“Android SDK”,要填写应用名称、发布版本SHA1、开发版本SHA1,所以我建议现在就创建好你的应用项目,也好查看所需要填写的信息。在这里我的应用名称为“百度地图测试”,包名为"com.zhangmiao.baidumaptest11_4"。
发布、开发版本的SHA1的查看方式:

1.获取开发版SHA1:

输入命令:keytool -list -v -keystore debug.keystore,回车
输入密钥库口令:android(系统默认)回车。

这就看到了开发版SHA1了。

2.获取发布版SHA1:

2.1.创建自己的签名文件    

在Android Studio软件中选择Build->Generate Signed APK。点击Next按钮

这里可以选择Create New Key Store或者Choose Existing Key Store,选择存在的KeyStore文件也是可以的,直接选择即可,这里,我介绍一下创建新的KeyStore的步骤,点击Create new Key Store按钮,

Key store path:选择KeyStore的文件路径与名称。
Password:密码
Confirms:再次输入密码
Alias:别名
Password:key的密码
Confirms:再次输入密码
Validity(years):密钥的有效期
First and Last Name:你的名字
Organizational Unit:单位
Organization:组织
City or Locality:城市或者所在地
State or Province:省份
Country Code (XX):国家
填写完成之后点击"ok"按钮,返回到了Generate Signed APK的界面,这个时候发现界面的Key store password、Key alias、Key Password已经自动填写好了,
点击"Next"按钮,出现了Enter Master Password界面(有的可能不会出现这个界面),

填写密码即可,点击“OK”按钮,

Build Type的选项是release,还要记得勾选Signature Versions的选项。点击Finish按钮,到这里开发版本的keystore文件就创建好了。

2.2.查看发布版的SHA1

输入命令:keytool -list -v -keystore “创建的发布版的keystore文件的地址”,回车。
输入密钥库口令:前面设置的是什么,这里填写什么。

这就看到了发布版SHA1了。
将查看到的发布版与开发版的SHA1填写进对应的输入框中。然后点击提交即可。

三、在自己的应用中加入百度地图的Android版SDK

先下载百度地图Android版的SDK:下载地址:http://lbsyun.baidu.com/index.php?title=androidsdk/sdkandev-download,点击自定义下载,勾选自己需要的功能,点击开发包下载即可。
下载完成之后,解压压缩包,将libs里面的文件全部放入自己项目的libs文件夹下。在项目的build.gradle中加入以下语句:

android {
   ...
    sourceSets {
        main {
            jniLibs.srcDirs = [\'libs\']
        }
    }

}

这样就在你的项目中引入了百度地图的API了。

四、在自己的应用中显示一个地图

1.修改activity_main布局

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

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

</LinearLayout>

2.添加API_KEY

在AndroidManifest.xml文件中,为Application添加api_key

    <application
        ...>
        <meta-data android:name="com.baidu.lbsapi.API_KEY"
            android:value="在百度地图开发者平台界面查看自己应用的(访问应用)AK"/>

3.修改MainActivity文件

public class MainActivity extends AppCompatActivity {

    private MapView mMapView = null;

    private BaiduMap bdMap;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        SDKInitializer.initialize(getApplicationContext());
        setContentView(R.layout.activity_main);
        mMapView = (MapView) findViewById(R.id.map_view);
    }


    @Override
    protected void onResume() {
        super.onResume();
        mMapView.onResume();
    }

    @Override
    protected void onPause() {
        super.onPause();
        mMapView.onPause();
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        mMapView.onDestroy();
        MapView.setMapCustomEnable(false);
        mMapView = null;
    }
}

4.添加权限

在AndroidManifest.xml中添加以下权限:

    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.WRITE_SETTINGS" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.CALL_PHONE" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />

现在就可以运行程序了,可以看到出现地图了。

 

代码地址: https://github.com/ZhangMiao147/BookCode_TheFirstLineOfCode/tree/master/baidumaptest11_4

 

以上是关于Android调用照相机和百度地图开发,百度地图显示界面覆盖了相机界面,求大神解答?的主要内容,如果未能解决你的问题,请参考以下文章

想问下百度地图 android API 的精度能到多少

android 百度地图上marker点移动要怎么处理

安卓开发——在应用中简单调用Android百度地图API SDK

Android中调用百度地图

(7)第三方app调用百度地图

unity调用Android百度地图