Android应用中拍照后获取照片路径并上传的实例分享

Activity 中的代码,我只贴出重要的事件部分代码

public void doPhoto(View view)
{
  destoryBimap();
  String state = Environment.getExternalStorageState();
  if (state.equals(Environment.MEDIA_MOUNTED)) {
    Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");
    startActivityForResult(intent, 1);
  } else {
    Toast.makeText(MainActivity.this, "没有SD卡", Toast.LENGTH_LONG).show();
  }
} 

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
  Uri uri = data.getData();
  if (uri != null) {
    this.photo = BitmapFactory.decodeFile(uri.getPath());
  }
  if (this.photo == null) {
    Bundle bundle = data.getExtras();
    if (bundle != null) {
      this.photo = (Bitmap) bundle.get("data");
    } else {
      Toast.makeText(MainActivity.this, "拍照失败", Toast.LENGTH_LONG).show();
      return;
    }
  } 

  FileOutputStream fileOutputStream = null;
  try {
    // 获取 SD 卡根目录
    String saveDir = Environment.getExternalStorageDirectory() + "/meitian_photos";
    // 新建目录
    File dir = new File(saveDir);
    if (! dir.exists()) dir.mkdir();
    // 生成文件名
    SimpleDateFormat t = new SimpleDateFormat("yyyyMMddssSSS");
    String filename = "MT" + (t.format(new Date())) + ".jpg";
    // 新建文件
    File file = new File(saveDir, filename);
    // 打开文件输出流
    fileOutputStream = new FileOutputStream(file);
    // 生成图片文件
    this.photo.compress(Bitmap.CompressFormat.JPEG, 100, fileOutputStream);
    // 相片的完整路径
    this.picPath = file.getPath();
    ImageView imageView = (ImageView) findViewById(R.id.showPhoto);
    imageView.setImageBitmap(this.photo);
  } catch (Exception e) {
    e.printStackTrace();
  } finally {
    if (fileOutputStream != null) {
      try {
        fileOutputStream.close();
      } catch (Exception e) {
        e.printStackTrace();
      }
    }
  }
} 

/**
 * 销毁图片文件
 */
private void destoryBimap()
{
  if (photo != null && ! photo.isRecycled()) {
    photo.recycle();
    photo = null;
  }
}

Layout 布局页面

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  android:orientation="vertical"
  >
  <ScrollView
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
    <LinearLayout
      android:layout_width="fill_parent"
      android:layout_height="fill_parent"
      android:orientation="vertical"
      >
      <Button
        android:id="@+id/doPhoto"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:padding="10dp"
        android:layout_marginBottom="10dp"
        android:text="拍照"
        android:onClick="doPhoto"
        />
      <TextView
        android:id="@+id/showContent"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_marginBottom="10dp"
        />
      <ImageView
        android:id="@+id/showPhoto"
        android:layout_width="fill_parent"
        android:layout_height="250dp"
        android:scaleType="centerCrop"
        android:src="@drawable/add"
        android:layout_marginBottom="10dp"
        />
    </LinearLayout>
  </ScrollView>
</LinearLayout>

其中的上传工具类我们下面一起来看:
Android 发送HTTP GET POST 请求以及通过 MultipartEntityBuilder 上传文件

全部使用新的方式 MultipartEntityBuilder 来处理了。
httpmime-4.3.2.jar   
httpcore-4.3.1.jar

下载地址:http://hc.apache.org/downloads.cgi
有些镜像貌似打不开,页面上可以可以选择国内的 .cn 后缀的域名镜像服务器来下载

直接上代码了:
ZHttpRequset.java

package com.ai9475.util; 

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.methods.HttpRequestBase;
import org.apache.http.entity.mime.HttpMultipartMode;
import org.apache.http.entity.mime.MultipartEntityBuilder;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.params.BasicHttpParams;
import org.apache.http.params.HttpConnectionParams;
import org.apache.http.params.HttpParams;
import org.apache.http.protocol.HTTP; 

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.nio.charset.Charset; 

/**
 * Created by ZHOUZ on 14-2-3.
 */
public class ZHttpRequest
{
  public final String HTTP_GET = "GET"; 

  public final String HTTP_POST = "POST"; 

  /**
   * 当前请求的 URL
   */
  protected String url = ""; 

  /**
   * HTTP 请求的类型
   */
  protected String requsetType = HTTP_GET; 

  /**
   * 连接请求的超时时间
   */
  protected int connectionTimeout = 5000; 

  /**
   * 读取远程数据的超时时间
   */
  protected int soTimeout = 10000; 

  /**
   * 服务端返回的状态码
   */
  protected int statusCode = -1; 

  /**
   * 当前链接的字符编码
   */
  protected String charset = HTTP.UTF_8; 

  /**
   * HTTP GET 请求管理器
   */
  protected HttpRequestBase httpRequest= null; 

  /**
   * HTTP 请求的配置参数
   */
  protected HttpParams httpParameters= null; 

  /**
   * HTTP 请求响应
   */
  protected HttpResponse httpResponse= null; 

  /**
   * HTTP 客户端连接管理器
   */
  protected HttpClient httpClient= null; 

  /**
   * HTTP POST 方式发送多段数据管理器
   */
  protected MultipartEntityBuilder multipartEntityBuilder= null; 

  /**
   * 绑定 HTTP 请求的事件监听器
   */
  protected OnHttpRequestListener onHttpRequestListener = null; 

  public ZHttpRequest(){} 

  public ZHttpRequest(OnHttpRequestListener listener) {
    this.setOnHttpRequestListener(listener);
  } 

  /**
   * 设置当前请求的链接
   *
   * @param url
   * @return
   */
  public ZHttpRequest setUrl(String url)
  {
    this.url = url;
    return this;
  } 

  /**
   * 设置连接超时时间
   *
   * @param timeout 单位(毫秒),默认 5000
   * @return
   */
  public ZHttpRequest setConnectionTimeout(int timeout)
  {
    this.connectionTimeout = timeout;
    return this;
  } 

  /**
   * 设置 socket 读取超时时间
   *
   * @param timeout 单位(毫秒),默认 10000
   * @return
   */
  public ZHttpRequest setSoTimeout(int timeout)
  {
    this.soTimeout = timeout;
    return this;
  } 

  /**
   * 设置获取内容的编码格式
   *
   * @param charset 默认为 UTF-8
   * @return
   */
  public ZHttpRequest setCharset(String charset)
  {
    this.charset = charset;
    return this;
  } 

  /**
   * 获取当前 HTTP 请求的类型
   *
   * @return
   */
  public String getRequestType()
  {
    return this.requsetType;
  } 

  /**
   * 判断当前是否 HTTP GET 请求
   *
   * @return
   */
  public boolean isGet()
  {
    return this.requsetType == HTTP_GET;
  } 

  /**
   * 判断当前是否 HTTP POST 请求
   *
   * @return
   */
  public boolean isPost()
  {
    return this.requsetType == HTTP_POST;
  } 

  /**
   * 获取 HTTP 请求响应信息
   *
   * @return
   */
  public HttpResponse getHttpResponse()
  {
    return this.httpResponse;
  } 

  /**
   * 获取 HTTP 客户端连接管理器
   *
   * @return
   */
  public HttpClient getHttpClient()
  {
    return this.httpClient;
  } 

  /**
   * 添加一条 HTTP 请求的 header 信息
   *
   * @param name
   * @param value
   * @return
   */
  public ZHttpRequest addHeader(String name, String value)
  {
    this.httpRequest.addHeader(name, value);
    return this;
  } 

  /**
   * 获取 HTTP GET 控制器
   *
   * @return
   */
  public HttpGet getHttpGet()
  {
    return (HttpGet) this.httpRequest;
  } 

  /**
   * 获取 HTTP POST 控制器
   *
   * @return
   */
  public HttpPost getHttpPost()
  {
    return (HttpPost) this.httpRequest;
  } 

  /**
   * 获取请求的状态码
   *
   * @return
   */
  public int getStatusCode()
  {
    return this.statusCode;
  } 

  /**
   * 通过 GET 方式请求数据
   *
   * @param url
   * @return
   * @throws IOException
   */
  public String get(String url) throws Exception
  {
    this.requsetType = HTTP_GET;
    // 设置当前请求的链接
    this.setUrl(url);
    // 新建 HTTP GET 请求
    this.httpRequest = new HttpGet(this.url);
    // 执行客户端请求
    this.httpClientExecute();
    // 监听服务端响应事件并返回服务端内容
    return this.checkStatus();
  } 

  /**
   * 获取 HTTP POST 多段数据提交管理器
   *
   * @return
   */
  public MultipartEntityBuilder getMultipartEntityBuilder()
  {
    if (this.multipartEntityBuilder == null) {
      this.multipartEntityBuilder = MultipartEntityBuilder.create();
      // 设置为浏览器兼容模式
      multipartEntityBuilder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
      // 设置请求的编码格式
      multipartEntityBuilder.setCharset(Charset.forName(this.charset));
    }
    return this.multipartEntityBuilder;
  } 

  /**
   * 配置完要 POST 提交的数据后, 执行该方法生成数据实体等待发送
   */
  public void buildPostEntity()
  {
    // 生成 HTTP POST 实体
    HttpEntity httpEntity = this.multipartEntityBuilder.build();
    this.getHttpPost().setEntity(httpEntity);
  } 

  /**
   * 发送 POST 请求
   *
   * @param url
   * @return
   * @throws Exception
   */
  public String post(String url) throws Exception
  {
    this.requsetType = HTTP_POST;
    // 设置当前请求的链接
    this.setUrl(url);
    // 新建 HTTP POST 请求
    this.httpRequest = new HttpPost(this.url);
    // 执行客户端请求
    this.httpClientExecute();
    // 监听服务端响应事件并返回服务端内容
    return this.checkStatus();
  } 

  /**
   * 执行 HTTP 请求
   *
   * @throws Exception
   */
  protected void httpClientExecute() throws Exception
  {
    // 配置 HTTP 请求参数
    this.httpParameters = new BasicHttpParams();
    this.httpParameters.setParameter("charset", this.charset);
    // 设置 连接请求超时时间
    HttpConnectionParams.setConnectionTimeout(this.httpParameters, this.connectionTimeout);
    // 设置 socket 读取超时时间
    HttpConnectionParams.setSoTimeout(this.httpParameters, this.soTimeout);
    // 开启一个客户端 HTTP 请求
    this.httpClient = new DefaultHttpClient(this.httpParameters);
    // 启动 HTTP POST 请求执行前的事件监听回调操作(如: 自定义提交的数据字段或上传的文件等)
    this.getOnHttpRequestListener().onRequest(this);
    // 发送 HTTP 请求并获取服务端响应状态
    this.httpResponse = this.httpClient.execute(this.httpRequest);
    // 获取请求返回的状态码
    this.statusCode = this.httpResponse.getStatusLine().getStatusCode();
  } 

  /**
   * 读取服务端返回的输入流并转换成字符串返回
   *
   * @throws Exception
   */
  public String getInputStream() throws Exception
  {
    // 接收远程输入流
    InputStream inStream = this.httpResponse.getEntity().getContent();
    // 分段读取输入流数据
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    byte[] buf = new byte[1024];
    int len = -1;
    while ((len = inStream.read(buf)) != -1) {
      baos.write(buf, 0, len);
    }
    // 数据接收完毕退出
    inStream.close();
    // 将数据转换为字符串保存
    return new String(baos.toByteArray(), this.charset);
  } 

  /**
   * 关闭连接管理器释放资源
   */
  protected void shutdownHttpClient()
  {
    if (this.httpClient != null && this.httpClient.getConnectionManager() != null) {
      this.httpClient.getConnectionManager().shutdown();
    }
  } 

  /**
   * 监听服务端响应事件并返回服务端内容
   *
   * @return
   * @throws Exception
   */
  protected String checkStatus() throws Exception
  {
    OnHttpRequestListener listener = this.getOnHttpRequestListener();
    String content;
    if (this.statusCode == HttpStatus.SC_OK) {
      // 请求成功, 回调监听事件
      content = listener.onSucceed(this.statusCode, this);
    } else {
      // 请求失败或其他, 回调监听事件
      content = listener.onFailed(this.statusCode, this);
    }
    // 关闭连接管理器释放资源
    this.shutdownHttpClient();
    return content;
  } 

  /**
   * HTTP 请求操作时的事件监听接口
   */
  public interface OnHttpRequestListener
  {
    /**
     * 初始化 HTTP GET 或 POST 请求之前的 header 信息配置 或 其他数据配置等操作
     *
     * @param request
     * @throws Exception
     */
    public void onRequest(ZHttpRequest request) throws Exception; 

    /**
     * 当 HTTP 请求响应成功时的回调方法
     *
     * @param statusCode 当前状态码
     * @param request
     * @return 返回请求获得的字符串内容
     * @throws Exception
     */
    public String onSucceed(int statusCode, ZHttpRequest request) throws Exception; 

    /**
     * 当 HTTP 请求响应失败时的回调方法
     *
     * @param statusCode 当前状态码
     * @param request
     * @return 返回请求失败的提示内容
     * @throws Exception
     */
    public String onFailed(int statusCode, ZHttpRequest request) throws Exception;
  } 

  /**
   * 绑定 HTTP 请求的监听事件
   *
   * @param listener
   * @return
   */
  public ZHttpRequest setOnHttpRequestListener(OnHttpRequestListener listener)
  {
    this.onHttpRequestListener = listener;
    return this;
  } 

  /**
   * 获取已绑定过的 HTTP 请求监听事件
   *
   * @return
   */
  public OnHttpRequestListener getOnHttpRequestListener()
  {
    return this.onHttpRequestListener;
  }
}

在 Activity 中的使用方法(这里我还是只写主体部分代码):
MainActivity.java

public void doClick(View view)
{
  ZHttpRequest get = new ZHttpRequest();
  get
      .setCharset(HTTP.UTF_8)
      .setConnectionTimeout(5000)
      .setSoTimeout(5000);
  get.setOnHttpRequestListener(new ZHttpRequest.OnHttpRequestListener() {
    @Override
    public void onRequest(ZHttpRequest request) throws Exception { 

    } 

    @Override
    public String onSucceed(int statusCode, ZHttpRequest request) throws Exception {
      return request.getInputStream();
    } 

    @Override
    public String onFailed(int statusCode, ZHttpRequest request) throws Exception {
      return "GET 请求失败:statusCode "+ statusCode;
    }
  }); 

  ZHttpRequest post = new ZHttpRequest();
  post
      .setCharset(HTTP.UTF_8)
      .setConnectionTimeout(5000)
      .setSoTimeout(10000);
  post.setOnHttpRequestListener(new ZHttpRequest.OnHttpRequestListener() {
    private String CHARSET = HTTP.UTF_8;
    private ContentType TEXT_PLAIN = ContentType.create("text/plain", Charset.forName(CHARSET)); 

    @Override
    public void onRequest(ZHttpRequest request) throws Exception {
      // 设置发送请求的 header 信息
      request.addHeader("cookie", "abc=123;456=爱就是幸福;");
      // 配置要 POST 的数据
      MultipartEntityBuilder builder = request.getMultipartEntityBuilder();
      builder.addTextBody("p1", "abc");
      builder.addTextBody("p2", "中文", TEXT_PLAIN);
      builder.addTextBody("p3", "abc中文cba", TEXT_PLAIN);
      if (picPath != null && ! "".equals(picPath)) {
        builder.addTextBody("pic", picPath);
        builder.addBinaryBody("file", new File(picPath));
      }
      request.buildPostEntity();
    } 

    @Override
    public String onSucceed(int statusCode, ZHttpRequest request) throws Exception {
      return request.getInputStream();
    } 

    @Override
    public String onFailed(int statusCode, ZHttpRequest request) throws Exception {
      return "POST 请求失败:statusCode "+ statusCode;
    }
  }); 

  TextView textView = (TextView) findViewById(R.id.showContent);
  String content = "初始内容";
  try {
    if (view.getId() == R.id.doGet) {
      content = get.get("http://www.baidu.com");
      content = "GET数据:isGet: " + (get.isGet() ? "yes" : "no") + " =>" + content;
    } else {
      content = post.post("http://192.168.1.6/test.php");
      content = "POST数据:isPost" + (post.isPost() ? "yes" : "no") + " =>" + content;
    } 

  } catch (IOException e) {
    content = "IO异常:" + e.getMessage();
  } catch (Exception e) {
    content = "异常:" + e.getMessage();
  }
  textView.setText(content);
}

其中 picPath 为 SD 卡中的图片路径 String 类型,我是直接拍照后进行上传用的
布局页面
activity_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  android:orientation="vertical"
  >
  <ScrollView
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
    <LinearLayout
      android:layout_width="fill_parent"
      android:layout_height="fill_parent"
      android:orientation="vertical"
      >
      <Button
        android:id="@+id/doGet"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:padding="10dp"
        android:layout_marginBottom="10dp"
        android:text="GET请求"
        android:onClick="doClick"
        />
      <Button
        android:id="@+id/doPost"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:padding="10dp"
        android:layout_marginBottom="10dp"
        android:text="POST请求"
        android:onClick="doClick"
        />
      <Button
        android:id="@+id/doPhoto"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:padding="10dp"
        android:layout_marginBottom="10dp"
        android:text="拍照"
        android:onClick="doPhoto"
        />
      <TextView
        android:id="@+id/showContent"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_marginBottom="10dp"
        />
      <ImageView
        android:id="@+id/showPhoto"
        android:layout_width="fill_parent"
        android:layout_height="250dp"
        android:scaleType="centerCrop"
        android:src="@drawable/add"
        android:layout_marginBottom="10dp"
        />
    </LinearLayout>
  </ScrollView>
</LinearLayout>

至于服务端我用的 PHP ,只是简单的输出获取到的数据而已

<?php
echo 'GET:<br>'. "\n";
//print_r(array_map('urldecode', $_GET));
print_r($_GET);
echo '<br>'. "\n". 'POST:<br>'. "\n";
//print_r(array_map('urldecode', $_POST));
print_r($_POST);
echo '<br>'. "\n". 'FILES:<br>'. "\n";
print_r($_FILES);
echo '<br>'. "\n". 'COOKIES:<br>'. "\n";
print_r($_COOKIE);
(0)

相关推荐

  • Android使用phonegap从相册里面获取照片(代码分享)

    话不多说,请看代码: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Take a Photo</title> <script type="text/javascript" charset="UTF-8" src="cordova.js"></script> &

  • android获取照片的快照 思路及实现方法

    当我们在做相册.上传相关的应用的时候需要获取图片的快照,这时候就需要获取图片的快照. android中专门有一个BitmapFactory类可以来处理这类需求. 实现的步骤如下: 1.首先解析出图片文件(注意在这里为了节约内存将inJustDecodeBounds设为true,这样的话解析的图片的话只有图片的尺寸大小信息) 复制代码 代码如下: BitmapFactory.Options bmpFactoryOptions = new BitmapFactory.Options();bmpFac

  • Android 调用系统相机拍摄获取照片的两种方法实现实例

    Android 调用系统相机拍摄获取照片的两种方法实现实例 在我们Android开发中经常需要做这个一个功能,调用系统相机拍照,然后获取拍摄的照片.下面是我总结的两种方法获取拍摄之后的照片,一种是通过Bundle来获取压缩过的照片,一种是通过SD卡获取的原图. 下面是演示代码: 布局文件: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http:

  • Android应用中拍照后获取照片路径并上传的实例分享

    Activity 中的代码,我只贴出重要的事件部分代码 public void doPhoto(View view) { destoryBimap(); String state = Environment.getExternalStorageState(); if (state.equals(Environment.MEDIA_MOUNTED)) { Intent intent = new Intent("android.media.action.IMAGE_CAPTURE"); s

  • Android部分手机拍照后获取的图片被旋转问题的解决方法

    调用Android系统拍照功能后,三星手机拍摄后的照片被旋转了90度,横着拍给你变成竖的,竖的拍给你变成横的.其它品牌的手机都是正常的,就三星出现这个怪事. 在Android适配上,我原来一直以为国内的小米手机够奇葩了,结果还有更奇葩的!你说你没事旋转照片干啥,实在是猜不透其居心何在,纯粹是在给开发者制造麻烦啊! 解决办法是获取到拍照后照片被旋转的角度,再旋转回去就好了. 具体思路: 1.首先在调用拍照方法时,保存拍照后的相片原图,得到原图路径,(PhotoBitmapUtils是我自己写的一个

  • asp.net中MVC借助Iframe实现无刷新上传文件实例

    本文实例讲述了asp.net中MVC借助Iframe实现无刷新上传文件的方法.分享给大家供大家参考.具体实现方法如下: html: 复制代码 代码如下: <div id="uploadwindow" style="display: none;">     <form action="/ShopActivitys/ImportActivityItems" id="form1" name="form1&

  • EDI中JAVA通过FTP工具实现文件上传下载实例

    最近接手一个EDI项目,收获颇多.其实我在第一家公司是接触过EDI的,当初我们用EDI主要实现了订单数据传输,客户向我们下达采购订单,通过VPN及FTP工具将采购订单以约定的报文形式放到指定的文件服务器中,然后我们EDI系统会定时去文件服务器中获取报文,最后解析并生成我们的销售订单.这些年过去了,我仍记着当初用的最多的是EDI850.EDI855.  一.首先介绍一下EDI的概念 Electronic data interchange,电子数据交换. EDI其实就是把原来纸质的订单/发货通知等业

  • Android应用中炫酷的横向和环形进度条的实例分享

    一.概述 最近需要用进度条,秉着不重复造轮子的原则,上github上搜索了一番,看了几个觉得比较好看的ProgressBar,比如:daimajia的等.简单看了下代码,基本都是继承自View,彻彻底底的自定义了一个进度条.盯着那绚丽滚动条,忽然觉得,为什么要通过View去写一个滚动条,系统已经提供了ProgressBar以及属于它的特性,我们没必要重新去构建一个,但是系统的又比较丑,不同版本变现还不一定一样.那么得出我们的目标:改变系统ProgressBar的样子. 对没错,我们没有必要去从0

  • Android 系统相机拍照后相片无法在相册中显示解决办法

    Android 系统相机拍照后相片无法在相册中显示解决办法 目前自己使用发送广播实现了效果 public void photo() { Intent openCameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); startActivityForResult(openCameraIntent, TAKE_PICTURE); } 解决方法: protected void onActivityResul

  • 解决android有的手机拍照后上传图片被旋转的问题

    需求:做仿新浪发微博的项目,能够上传图片还有两外一个项目用到手机拍摄图片,这两个都需要把图片上传到服务器 遇到问题:有的手机拍摄的图片旋转90度,有的图片旋转了180度,有的手机是正常的,服务器要求的是正的,这样问题就来了,不能用户发个照片在微博上看到的是被旋转了的啊,另外一个项目里旋转了的图片直接匹配出现问题,这个更严重. 解决:开始的时候在网上没有找到很好的解决办法,谷歌百度的搜了一通,想到第一种解决方式,当手机拍照结束,在返回结果处理里面立即跳转到一个新的页面,在新的页面里让用户自己手动去

  • Android百度地图定位后获取周边位置的实现代码

    本文实例讲解Android百度地图定位后获取周边位置的实现代码,分享给大家供大家参考,具体内容如下 效果图: 具体代码: 1.布局文件 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical&q

  • Android圆形头像拍照后“无法加载此图片”的问题解决方法(适配Android7.0)

    Feature: 点击选择拍照或者打开相册,选取图片进行裁剪最后设置为圆形头像. Problem: 拍好照片,点击裁剪,弹Toast"无法加载此图片". Solution: 在裁剪的class里加两行代码 intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); intent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION); 主要代码如下: public static final S

随机推荐