Android 低版本sdk中没有getSupportedPreviewSizes和getSupportedPictureSizes函数怎么办?

在做camera和SurfaceView做摄像头程序时,需要获取camera支持的相片大小,在低版本sdk中没有getSupportedPictureSizes函数,怎么办呢,请参阅下面的关键代码:

1、定义Size类

public class Size {

    /***

     * Sets the dimensions for pictures.

     *

     * @param w the photo width (pixels)

     * @param h the photo height (pixels)

     */

    public Size(int w, int h) {
        width = w;
        height = h;
    }

    /***

     * Compares {@code obj} to this size.

     *

     * @param obj the object to compare this size with.

     * @return {@code true} if the width and height of {@code obj} is the

     *         same as those of this size. {@code false} otherwise.

     */

    @Override

    public boolean equals(Object obj) {
        if (!(obj instanceof Size)) {
            return false;
        }
        Size s = (Size) obj;
        return width == s.width && height == s.height;
    }

    @Override

    public int hashCode() {
        return width * 32713 + height;
    }

    /*** width of the picture */
    public int width;

    /*** height of the picture */
    public int height;
}

2、定义CameraHelper类

import java.util.ArrayList;
import java.util.List;
import java.util.StringTokenizer;
import android.hardware.Camera;
public class CameraHelper {
    private static final String KEY_PREVIEW_SIZE = "preview-size";
    private static final String KEY_PICTURE_SIZE = "picture-size";
    private static final String SUPPORTED_VALUES_SUFFIX = "-values";
    private Camera.Parameters mParms;

    public CameraHelper(Camera.Parameters parm) {
        this.mParms = parm;
    }

    public List<Size> GetSupportedPreviewSizes() {
        String str = mParms.get(KEY_PREVIEW_SIZE + SUPPORTED_VALUES_SUFFIX);
        return splitSize(str);
    }

    public List<Size> GetSupportedPictureSizes() {
        String str = mParms.get(KEY_PICTURE_SIZE + SUPPORTED_VALUES_SUFFIX);
        return splitSize(str);
    }    

    private ArrayList<Size> splitSize(String str) {
        if (str == null)
            return null;
        StringTokenizer tokenizer = new StringTokenizer(str, ",");
        ArrayList<Size> sizeList = new ArrayList<Size>();
        while (tokenizer.hasMoreElements()) {
            Size size = strToSize(tokenizer.nextToken());
            if (size != null)
                sizeList.add(size);
        }
        if (sizeList.size() == 0)
            return null;
        return sizeList;
    }

    private Size strToSize(String str) {
        if (str == null)
            return null;
        int pos = str.indexOf(‘x‘);
        if (pos != -1) {
            String width = str.substring(0, pos);
            String height = str.substring(pos + 1);
            return new Size(Integer.parseInt(width), Integer.parseInt(height));
        }
        return null;
    }

}

其实,主要是通过Camera.Parameters的get方法,然后再解析获取的字符串来代替那些不存在的api。

时间: 2024-08-03 21:53:11

Android 低版本sdk中没有getSupportedPreviewSizes和getSupportedPictureSizes函数怎么办?的相关文章

在高版本SDK中打开现存低版本SDK工程

直接打开低版本SDK工程会出现错误提示:“Unable to resolve target 'android-xx” 解决方法: 1.将project.properties文件中的“target=android-xx”更改为当前API所对应的版本 2.注意AndroidManifest.xml文件中“android:minSdkVersion="xx"”应该小于等于引入工程的API版本 注意:若更改后重新编译仍然报错,请删除gen目录下R.java与buildconfig.java文件

matchesSelector及低版本IE中对该方法的实现

matchesSelector用来匹配dom元素是否匹配某css selector.它为一些高级方法的实现提供了基础支持,比如事件代理,parent, closest等. W3C在2006年就提出了该方法草案,Firefox和Safari相继实现,比如 ? 1 2 3 4 5 6 <div id="wraper" class="item"></div> <script>     wraper.mozMatchesSelector(

Notification在不同版本SDK中的使用

今天总结了一下Notification的使用,发现这个控件在版本上有点扯淡.API11和API16两个分水岭,导致菜鸟在学习的时候比较吃力,受影响的外界因素是多样的,其中比较重要的就是你测试的android设备的版本,我刚开始使用的android版本为android4.0.4,我在程序中使用的是API16以上的方法,正好android4.0对应的API为API15,相差了一个版本,导致发出通知的时候程序挂掉. 如果你要兼容低版本的android系统的话(API11以下),建议使用一下方法: No

js动态加载activeX控件在IE11与低版本IE中的差异

由于IE11更加遵循W3C规范,所以IE11与低版本IE在加载activeX时有差别. 1.IE11中动态加载activeX的顺序 var objectTag = document.createElement("object"); objectTag.style.height = XPlayPluginDivHeight + "px"; objectTag.style.width = XPlayPluginDivWidth + "px"; obj

高版本数据库数据附加到低版本数据库中的解决方案

首先, 找一台装有SQL Server 2008的电脑, 将你的数据库文件附加到这台电脑里.附加成功后, 在SSMS的对象资源管理器窗口右键单击刚刚附加的数据库,依次选"任务>生成脚本...", 此时会弹出脚本向导对话框.点"下一步".在"选择数据库"对话框选中刚刚附加的数据库, 同时将底部的"为所选数据库中的所有对象编写脚本"打勾. 点下一步.在"选择脚本选项"对话框中,还需要修改以下几个选项:1)

Highcharts 在低版本 IE 上使用注意事项及个人总结

很多人经常遇到图表在主流浏览器上运行正常,在低版本IE(包括IE6.IE7.IE8等)下运行出错(图表显示不出来或显示不正常)的情况,这不是兼容性问题,而是 IE 浏览器自身的一些限制,我们只需要注意一些事项即可避免这种情况. 注意事项: 1.使用合适的HTML 文档模式 html 文档模式指的是文件的第一行 <!DOCTYPE> 在低版本 IE 中请使用 HTML 4 严格模式 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN&

sql server实现高版本向低版本兼容

用的是sql server2014要然后现在要将2014数据库的数据放到2012中操作如: 一,先用2014的数据库导出表结构和数据: 选择需要导出的数据 右键---任务---生成脚本 ---根据下面截图进行操作---点击确认后选择在新窗口显示最后一直下一步到最后. 二,在低版本数据库中新建一个新的数据库,将到出来的脚本直接在新建的数据库中跑即可.

SQLServer笔记--如何把SQLServer数据库从高版本降级到低版本?

方法一:使用图形化操作(GUI),打开SSMS(SQL Server Management Studio) 第一步:右键你要降级的数据库,按下图选择: 第二步:在对话框中的[高级]中按如下方式设置. 第三步:把脚本保存起来,然后在低版本的SQLServer中运行脚本. 打开低版本SQLServer数据库,连接上数据库,双击脚本即可运行.或者把脚本拖到数据库的查询分析器界面([新建查询]中粘贴脚本代码即可),然后点运行. 第四步:在高版本的SQLServer中通过[任务]→[导入数据],将数据从高

SqlServer高版本数据本分还原到低版本方法

最近遇见一个问题: 想要将Sqlserver高版本备份的数据还原到低版本SqlServer上去,但是这在SqlServer中是没法直接还原数据库的,所以经过一系列的请教总结出来一下可用方法. 首先.你得在电脑上装有你将要操作的高版本以及低版本的SqlServer或者你能够连上SqlServer高版本所在的数据库(便于后面拷贝数据), 第二步.打开高版本数据库中你需要备份的数据库,将你备份的数据库相关的登录名或者用户删除.右键数据库->任务->生成脚本.在生成脚本的“选择对象”步骤选择“编写整个