Android Action使用实例

Android根据Action实现一下功能:java

package com.uwo.tools.aibum.local.utils;

import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Environment;
import android.provider.MediaStore;
import android.util.Log;

import java.io.File;

/**
 * Created by SRain on 2015/12/11.
 * <p/>
 * 根据Action实现功能
 * 1.拍照
 * 2.获取本地相册
 * 3.剪切图片
 * 4.拨打电话
 * 5.扫码二维码
 */
public class ActionUtils {

    public static final int GET_IMAGE_FROM_PHONE = 5002; // 获取相册返回标识码
    public static final int CROP_IMAGE = 5003;  // 剪切返回标识码

    public static final int OPEN_CAMERA_IMAGE_URI = 5100; // 拍照直接返回uri
    public static final int OPEN_CAMERA_IMAGE_PATH = 5101; // 拍照传入返回文件路径
    public static final int OPEN_CAMERA_IMAGE_THUMB = 5102; // 拍照返回缩略图
    public static final int OPEN_CAMERA_IMAGE_NO_RESULT = 5103; // 拍照无返回值
    public static final int SCAN_QR_CODE = 5104; // 扫码二维码

    /**
     * 使用系统相机拍照
     * 设置输出参数,返回Uri
     *
     * @param activity
     */
    public static void openCameraImage(final Activity activity) {
        ImageUriUtils.imageUriFromCamera = ImageUriUtils.createImagePathUri(activity);
        Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        intent.putExtra(MediaStore.EXTRA_OUTPUT, ImageUriUtils.imageUriFromCamera);
        activity.startActivityForResult(intent, OPEN_CAMERA_IMAGE_URI);
    }

    /**
     * 使用系统相机拍照
     * 设置输出参数,返回指定的文件路径中
     *
     * @param activity
     * @param path     拍照后文件保存的路径
     */
    public static void openCameraImage(final Activity activity, String path) {
        File file = new File(path);
        if (!file.exists()) {
            file = new File(Environment.getExternalStorageDirectory(), path);
        }
        Uri uri = Uri.fromFile(file);
        ImageUriUtils.imageUriFromCamera = ImageUriUtils.createImagePathUri(activity);
        Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
        activity.startActivityForResult(intent, OPEN_CAMERA_IMAGE_PATH);
    }

    /**
     * 使用系统相机拍照
     * 不设置输出参数,系统会自动生成一个uri,可是只会返回一个缩略图
     * <p/>
     *
     * @param activity
     * @return 返回图片在onActivityResult中经过如下代码获取 Bitmap bitmap = (Bitmap) data.getExtras().get("data");
     */
    public static void openCameraImageThumb(final Activity activity) {
        ImageUriUtils.imageUriFromCamera = ImageUriUtils.createImagePathUri(activity);
        Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        activity.startActivityForResult(intent, OPEN_CAMERA_IMAGE_THUMB);
    }

    /**
     * 不关心返回结果直接拍照
     */
    public static void openCameraImageNoResult(final Activity activity) {
        Intent intent = new Intent(); //调用照相机
        intent.setAction("android.media.action.STILL_IMAGE_CAMERA");
        activity.startActivity(intent);
    }

    /**
     * 打开本地相册
     *
     * @param activity
     */
    public static void openLocalImage(final Activity activity) {
        Intent intent = new Intent();
        intent.setType("image/*");
        intent.setAction(Intent.ACTION_GET_CONTENT);
        activity.startActivityForResult(intent, GET_IMAGE_FROM_PHONE);
    }

    /**
     * 图片剪裁
     *
     * @param activity
     * @param srcUri
     */
    public static void cropUriImage(Activity activity, Uri srcUri) {
        ImageUriUtils.cropImageUri = ImageUriUtils.createImagePathUri(activity);
        Intent intent = new Intent("com.android.camera.action.CROP");
        intent.setDataAndType(srcUri, "image/*");
        intent.putExtra("crop", "true");

        ////////////////////////////////////////////////////////////////
        // 1.宽高和比例都不设置时,裁剪框能够自行调整(比例和大小均可以随意调整)
        ////////////////////////////////////////////////////////////////
        // 2.只设置裁剪框宽高比(aspect)后,裁剪框比例固定不可调整,只能调整大小
        ////////////////////////////////////////////////////////////////
        // 3.裁剪后生成图片宽高(output)的设置和裁剪框无关,只决定最终生成图片大小
        ////////////////////////////////////////////////////////////////
        // 4.裁剪框宽高比例(aspect)能够和裁剪后生成图片比例(output)不一样,此时,
        // 会以裁剪框的宽为准,按照裁剪宽高比例生成一个图片,该图和框选部分可能不一样,
        //  不一样的状况多是截取框选的一部分,也可能超出框选部分,向下延伸补足
        ////////////////////////////////////////////////////////////////

        // aspectX aspectY 是裁剪框宽高的比例
//        intent.putExtra("aspectX", 1);
//        intent.putExtra("aspectY", 1);
        // outputX outputY 是裁剪后生成图片的宽高
//    intent.putExtra("outputX", 300);
//    intent.putExtra("outputY", 100);

        // return-data为true时,会直接返回bitmap数据,可是大图裁剪时会出现问题,推荐下面为false时的方式
        // return-data为false时,不会返回bitmap,但须要指定一个MediaStore.EXTRA_OUTPUT保存图片uri
        Log.e("srcUri", srcUri.toString());
        intent.putExtra(MediaStore.EXTRA_OUTPUT, ImageUriUtils.cropImageUri);
        Log.e("cropImageUri", ImageUriUtils.cropImageUri.toString());
        intent.putExtra("return-data", true);
        activity.startActivityForResult(intent, CROP_IMAGE);
    }
    
    /**
     * 拨打电话功能
     * <uses-permission android:name="android.permission.CALL_PHONE" />
     *
     * @param context
     * @param phoneNO
     **/
     public static void callPhone(Context context, String phoneNO){
        Intent intent = new Intent(Intent.ACTION_DIAL);
        Uri data = Uri.parse("tel:" + "135xxxxxxxx");
        intent.setData(data);
        context.startActivity(intent);
    }
    
    /**
     * 扫码二维码
     * http://blog.csdn.net/jdsjlzx/article/details/43098179 
     * http://blog.csdn.net/jdsjlzx/article/details/46429043
     * http://download.csdn.net/detail/xiaanming/5990219
     */
     public static void scanQRcode(Activity activity){
         Intent intent = new Intent("com.google.zxing.client.android.SCAN" );
         activity.startActivityForResult(intent, SCAN_QR_CODE);
     } 
}

Activity中重写onActivityResult()android

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    
    // 扫码返回结果
    if (requestCode == ActionUtils.SCAN_QR_CODE) {
       if ( resultCode == RESULT_OK ){
    	 Bundle bundle = intent.getExtras();
    	 String scanResult = bundle.getString( "result" );
    
    	  显示扫描后的结果
    	 String contents = intent.getStringExtra( "SCAN_RESULT" );
    	 String format = intent.getStringExtra( "SCAN_RESULT_FORMAT" );
    
    	 app.longToast( "条形码为:" + contents + "\n" + "条码类型为: " + format + "\n"
    	 + "scanResult:" + scanResult + "\n" );
       } else if ( resultCode == RESULT_CANCELED ){
       }
    }
    
    
}
相关文章
相关标签/搜索