`
longgangbai
  • 浏览: 7340639 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Android文件图片上传的详细讲解(三)---模式回调类

 
阅读更多
package com.easyway.fileupload;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.ContentResolver;
import android.content.DialogInterface;
import android.content.Intent;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.Bundle;
import android.provider.MediaStore;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageView;
/**
 * Activity 上传的界面
 * 
 * @Title: 
 * @Description: 实现TODO
 * @Copyright:Copyright (c) 2011
 * @Company:易程科技股份有限公司
 * @Date:2012-7-2
 * @author  longgangbai
 * @version 1.0
 */
public class AndroidUploadFilesActivity extends Activity implements OnClickListener{
 private static final String TAG = "uploadImage";
 
 private Button selectImage,uploadImage;
 private ImageView imageView;
 
 private String picPath = null;
 
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        selectImage = (Button) this.findViewById(R.id.selectImage);
        uploadImage = (Button) this.findViewById(R.id.uploadImage);
        selectImage.setOnClickListener(this);
        uploadImage.setOnClickListener(this);
        
        imageView = (ImageView) this.findViewById(R.id.imageView);
        
        
    }
    
 @Override
 public void onClick(View v) {
  switch (v.getId()) {
  case R.id.selectImage:
   /***
    * 这个是调用android内置的intent,来过滤图片文件   ,同时也可以过滤其他的  
    */
   Intent intent = new Intent();
   intent.setType("image/*");
   intent.setAction(Intent.ACTION_GET_CONTENT);
   //回调图片类使用的
   startActivityForResult(intent, RESULT_CANCELED);
   break;
  case R.id.uploadImage:
   if(picPath!=null&&picPath.length()>0)
   {
    UploadFileTask uploadFileTask=new UploadFileTask(this);
    uploadFileTask.execute(picPath);
   }
   break;
  default:
   break;
  }
 }

 /**
  * 回调执行的方法
  */
 @Override
 protected void onActivityResult(int requestCode, int resultCode, Intent data) {
  if(resultCode==Activity.RESULT_OK)
  {
   /**
    * 当选择的图片不为空的话,在获取到图片的途径  
    */
   Uri uri = data.getData();
   Log.e(TAG, "uri = "+ uri);
   try {
    String[] pojo = {MediaStore.Images.Media.DATA};
    
    Cursor cursor = managedQuery(uri, pojo, null, null,null);
    if(cursor!=null)
    {
     ContentResolver cr = this.getContentResolver();
     int colunm_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
     cursor.moveToFirst();
     String path = cursor.getString(colunm_index);
     /***
      * 这里加这样一个判断主要是为了第三方的软件选择,比如:使用第三方的文件管理器的话,你选择的文件就不一定是图片了,这样的话,我们判断文件的后缀名
      * 如果是图片格式的话,那么才可以   
      */
     if(path.endsWith("jpg")||path.endsWith("png"))
     {
      picPath = path;
      Bitmap bitmap = BitmapFactory.decodeStream(cr.openInputStream(uri));
      imageView.setImageBitmap(bitmap);
     }else{
      alert();
     }
    }else{
     alert();
    }
    
   } catch (Exception e) {
    e.printStackTrace();
   }
  }
  
  /**
   * 回调使用
   */
  super.onActivityResult(requestCode, resultCode, data);
 }
 
 private void alert()
    {
     Dialog dialog = new AlertDialog.Builder(this)
  .setTitle("提示")
  .setMessage("您选择的不是有效的图片")
  .setPositiveButton("确定",
    new DialogInterface.OnClickListener() {
     public void onClick(DialogInterface dialog,
       int which) {
      picPath = null;
     }
    })
  .create();
  dialog.show();
    }

}

 

分享到:
评论

相关推荐

    android httpconnection上传文件

    接下来,我们将详细讲解文件上传的步骤: 1. **选择文件**:Android提供了IntentACTION_PICK或者ACTION_GET_CONTENT可以用来让用户从设备中选择一个文件。你可以创建一个Intent,启动系统文件选择器,获取用户选定...

    android相机拍照,图片剪切

    调用Camera.takePicture()方法触发拍照,传入预设的回调函数,这些函数会在照片拍摄完成后被调用,处理JPEG或RAW格式的数据。 5. **处理照片数据**:在PictureCallback的onPictureTaken()方法中,可以对照片进行...

    apicloud 图片上传

    本话题将详细讲解如何在APICloud环境下实现图片上传功能。 一、APICloud简介 APICloud是一款混合移动应用开发平台,它允许开发者使用HTML5、CSS3和JavaScript编写前端代码,并通过其提供的API与原生设备功能进行...

    Android应用源码之拍照上传代码样例(转-IT计算机-毕业设计.zip

    下面将详细讲解这个“Android应用源码之拍照上传代码样例”所涵盖的关键知识点。 1. **Android权限管理**: 在Android中,访问相机和存储空间都需要申请相应的权限。在Android 6.0(API级别23)及更高版本,需要在...

    Android实现otg或usb通讯,异步串口功能

    例如,创建一个后台线程,使用`SerialPort`的监听器接口,当有数据可读时触发回调函数,将数据传递到主线程进行处理。 为了便于调试和测试,提供的apk文件可以安装在Android设备上,展示如何实际运行串口通讯功能。...

    Android开发应用从入门到精通.pdf

    3. Android应用生命周期:详细讲解一个Android应用从创建到销毁的整个过程,包括各种状态变化以及相应的回调方法。 4. Activity与Fragment:这是Android应用开发中最基础的两个概念,Activity是应用中单一屏幕的...

    《Android高级开发技术案例教程》PDF

    Android多线程和协程也是重点,书中的案例可能涉及到如何在Android应用中正确地使用线程池,以及如何利用Kotlin的协程库来简化异步编程,避免回调地狱,提高代码的可读性和可维护性。 除此之外,书中可能还会涉及...

    android自定义相机连拍

    - 连拍的结果通常会存储到指定的文件或内存中,开发者需要自行处理这些图片,比如保存到本地、上传服务器等。 6. **释放资源** - 当不再使用相机时,必须调用`Camera.release()`释放相机资源,防止应用崩溃或其他...

    Android快速SDK(5)联网请求库QuickHttp

    本篇文章将详细讲解Android快速SDK中的联网请求库——QuickHttp,以及如何有效地利用它来优化网络请求流程。 QuickHttp是一款专门为Android设计的轻量级HTTP请求库,旨在简化网络请求操作,提高开发效率。它提供了...

    Android开发HTTP使用okgo请求数据的实现demo

    创建一个网络请求工具类`NetUtil`,包含一个静态方法`sendRequest`,该方法接受请求的URL、请求类型(GET或POST)、参数Map以及回调接口: ```java public class NetUtil { public static void sendRequest(String...

    Android OpenGL ES 简明开发教程相关源码材质渲染

    在Android中,你需要在`onSurfaceCreated()`和`onSurfaceChanged()`回调中初始化OpenGL ES环境,创建和绑定纹理ID。你可以使用`GLUtils.texImage2D()`方法将Bitmap数据上传到GPU的纹理内存中。同时,别忘了启用纹理...

    mvp+okgo最简单demo拉起来就用新加接口嵌套调用

    4. **文件上传/下载**:OkGo提供方便的文件上传和下载功能,支持断点续传和多线程下载。 5. **自动转换**:通过Gson、FastJson等库,OkGo可以自动将JSON字符串转换为Java对象,简化了数据解析过程。 在"mvp+okgo最...

    各类对话框dialog汇总

    本篇文章将详细讲解如何使用`AlertDialog`创建各种类型的对话框,包括简单列表对话框、单选列表对话框、多选列表对话框、水平(圆形)进度对话框以及自定义登录对话框。 首先,`AlertDialog`是Android SDK提供的一...

    androidstarjack_支付宝集成过程详解— 运行DEMO

    本教程将详细讲解如何在Android项目中实现支付宝的集成,运行DEMO来熟悉整个支付流程。 首先,我们需要下载支付宝提供的SDK,这个在压缩包文件"支付宝钱包支付接口开发包2.0标准版(201501022)"中可以找到。SDK包含...

    安卓摄像头拍照

    下面将详细讲解如何在安卓系统中实现这一功能。 1. **开启相机权限** 在AndroidManifest.xml文件中,你需要添加相机权限: ```xml <uses-permission android:name="android.permission.CAMERA" /> ``` 这是...

    微信公众平台应用开发:方法、技巧与案例.(机械工业.柳峰)

     6.9.2 使用抓包工具分析文件上传请求 176  6.9.3 上传多媒体文件方法封装 179  6.9.4 下载多媒体文件 183  6.9.5 案例:上传及下载语音文件 184  6.10 小结 185 第7章 网络表情的使用 186  7.1 微信...

    Progress实现

    8. **Worker/JobScheduler**: Android的JobScheduler API(API 21+)和WorkManager库(兼容API 14+)允许以更灵活的方式调度后台任务,同时支持进度回调。WorkManager还提供了LiveData集成,可以方便地将进度信息...

    AnyChat demo

    7. **状态通知**:包括登录状态、通话状态、用户上下线等,开发者可以通过监听AnyChat的事件回调,获取这些实时的状态变化信息,以便进行界面更新和业务逻辑处理。 8. **错误处理**:在实际开发过程中,难免会遇到...

Global site tag (gtag.js) - Google Analytics