当前位置:  编程技术>移动开发
本页文章导读:
    ▪关于 Anroid Pro 三 “第5章 理解 Intents” 的补充        关于 Anroid Pro 3 “第5章 理解 Intents” 的补充    这本书提供的源码片段基本都能使用,偶尔有运行有问题的情况,也在于我对Android认识的不足以及目前仅在模拟器运行的限制。 1. 在调用以.........
    ▪ 关于config参数跟context参数的访问        关于config参数和context参数的访问 虽然在论坛中已经回答过不止一次,但现在看来,真正掌握这两个参数的区别的人5%都不到. 所以有必要专门写出来,供大家学习. 我们先来回顾一下各种内置对.........
    ▪ 基于ZXing项目开发的条形码扫描横屏       基于ZXing项目开发的条码扫描横屏最近项目条码扫描要改为横屏,网上所搜了一下,然后修改下面写代码就可以实现横屏条码扫描了 修改前效果图如下 具体代码修改如下: 1修改 activity配置.........

[1]关于 Anroid Pro 三 “第5章 理解 Intents” 的补充
    来源: 互联网  发布时间: 2014-02-18
关于 Anroid Pro 3 “第5章 理解 Intents” 的补充

    这本书提供的源码片段基本都能使用,偶尔有运行有问题的情况,也在于我对Android认识的不足以及目前仅在模拟器运行的限制。

1. 在调用以下拨号应用中,发生了错误。

    public static void call(Activity activity)
    {
	    Intent intent = new Intent(Intent.ACTION_CALL);
	    intent.setData(Uri.parse("tel:555-555-5555"));
	    activity.startActivity(intent);
    }    

    问题是需要在androidmanifest.xml中添加对拨号操作的许可,如下。

<uses-permission android:name="android.permission.CALL_PHONE"/>

2. 在调用如下地图导航应用时,发生错误   

    public static void showMapAtLatLong(Activity activity)
    {
		Intent intent = new Intent(Intent.ACTION_VIEW);
		//geo:lat,long?z=zoomlevel&q=question-string
		intent.setData(Uri.parse("geo:0,0?z=4&q=business+near+city"));
		activity.startActivity(intent);
    }
      后来在网上找到一篇博文,解释了这种情况是模拟器不支持造成。于是用以下代码来做分支,在模拟器上就临时用网页提供功能。

    private static boolean isEmulator() {
        return (Build.MODEL.equals("sdk")) || (Build.MODEL.equals("google_sdk"));
    }

    public static void showMapAtLatLong(Activity activity)
    {
		Intent intent = new Intent(Intent.ACTION_VIEW);
		//geo:lat,long?z=zoomlevel&q=question-string
		if( isEmulator() ) {
			intent.setData(Uri.parse("http://maps.google.com/?q=0,0?z=4&q=business+near+city"));
		} else {
			intent.setData(Uri.parse("geo:0,0?z=4&q=business+near+city"));
		}
		activity.startActivity(intent);
    }







  






    
[2] 关于config参数跟context参数的访问
    来源: 互联网  发布时间: 2014-02-18
关于config参数和context参数的访问

虽然在论坛中已经回答过不止一次,但现在看来,真正掌握这两个参数的区别的人5%都不到.
所以有必要专门写出来,供大家学习.

我们先来回顾一下各种内置对象的作用范围

httpservletrequest,httpservletresponse:这两个属性的作用范围最小。
时间上:只是本身请求和应答完成就失效,当然转发是把当前的request对象取出来传给另一
个资源,其实本身的request对象还是只生存到本次请求结束,response也同样。
空间上:只能发送请求的客户端有效。

httpsession:一次连结到客户端关闭,时间作用范围比上面两个大,空间任用范围相同。

servletconfig:从一个servlet被实例化后,对任何客户端在任何时候访问有效,但仅对本servlet
有效,一个servlet的servletconfig对象不能被另一个servlet访问。

servletcontext:对任何servlet,任何人在任何时间都有效,这才是真正全局的对象。

那么,servletconfig参数和servletcontext参数到底应该如何使用,如何取得?

一般来说,对整个应用的配置,为了不使用“硬编码”,应该配置为servletcontext参数,比如字
符集设定。
<web-app>
.................
<init-param>
<param-name>charset</param-name>
<param-value>gb2312</param-value>
</init-param>
.................
</web-app>
注意以上格式只是2。0以后的标准格式,旧容器(引擎)采用服务商自己的格式配置。注意它的
父元素应该是<web-app>也就是说它是对一个应用作用的。

而如果只有一个特定的servlet要设定的参数,其它servlet不能共享,应该配置为servletconfig
参数,如一个读取附件的servlet要用到绝对目录,而别的servlet不会用到:
<servlet>
<servlet-name>getatt</servlet-name>
<servlet-class>mail.getattservlet</servlet-class>
<init-param>
<param-name>abspath</param-name>
<param-value>/usr/mail/ax/axman/maildir/</param-value>
</init-param>
</servlet>
不用说,因为在<servlet>标签中已经指定了name和class,也就是说只有mail.getattservlet这个\r
servlet中才能取到path,而别的servlet是不能取到的。

那么如何访问这两个对象的参数呢?
访问servletconfig参数:
首先要取得servletconfig对象,然后调用它的getinitparameter();方法。要访问
servletconfig对象,jsp中直接使用config内置对象,但因为你的jsp编译后的servlet一般不会被
加到web.xml中的,所以一般不会通过jsp来取对本jsp编译后的servlet的配置参数,那么在servlet
中要得到servletconfig对象有两种方法:

在inii()方法中取到:通过init的重载方法传递

.....
public class test extends httpservlet
{
servletconfig config;
public void init(servletconfig config) throws servletexception {
this.config = config;
}
..................
}
然后在下面的方法中就可以访问config对象。但要注意,为了确保能从构造方法中到到当前servlet的
config对象,应该调用父类的构造方法:
.....
public class test extends httpservlet
{
servletconfig config;
public void init(servletconfig config) throws servletexception {
super.init(config);
this.config = config;
}
..................
}

通过getservletconfig()方法直接到时,这样做的好处是不必调手工传递属性,想在任何时候都可
以得到。

还有第三种方法,要自己实现一些接口,这里作为一般讨论就不介绍了。

要访问servletcontext对象,只要从现有的servletconfig对象getservletcontext()就可以了,然后\r
调用它的getinitparameter()方法就可以获取它的参数。

按说:servletcontext对象的作用域比servletconfig作用域大,为什么要从servletconfig中到得
servletcontext对象呢?我个人认为:容器保存了很多个servletcontext对象,请求时容器到底取哪一个\r
给你呢?那就取其中包含servletconfig信息的那个给你,就是说取servletconfig对象的父级对象。就好
象httpsession要从requset中取得一样,就是取那个包含当前requese对象的session对象给你,这只是我
的个人想法,还没有来得及看具体实现。反正就这么用吧。

    
[3] 基于ZXing项目开发的条形码扫描横屏
    来源: 互联网  发布时间: 2014-02-18
基于ZXing项目开发的条码扫描横屏

最近项目条码扫描要改为横屏,网上所搜了一下,然后修改下面写代码就可以实现横屏条码扫描了

修改前效果图如下


具体代码修改如下:

1修改 activity配置文件

<activity
            android:name=".CaptureActivity"
            android:configChanges="orientation|keyboardHidden"
            android:label="@string/app_name"
            android:screenOrientation="portrait"
            android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
            android:windowSoftInputMode="stateAlwaysHidden" >
        </activity>
   android:screenOrientation="portrait" 是关键 默认是landscape

2修改CameraManager.java的getFramingRectInPreview():

  rect.left = rect.left * cameraResolution.y / screenResolution.x;
     rect.right = rect.right * cameraResolution.y / screenResolution.x;
     rect.top = rect.top * cameraResolution.x / screenResolution.y;
     rect.bottom = rect.bottom * cameraResolution.x / screenResolution.y;

3修改CameraConfigurationManager.java中的setDesiredCameraParameters函数,

在setZoom(parameters);后增加setDisplayOrientation(camera, 180); 在setDesiredCameraParameters函数外增加

  private void setDisplayOrientation(Camera camera, int angle) {
        Method downPolymorphic;
        try {
            downPolymorphic = camera.getClass().getMethod(
                    “setDisplayOrientation”, new Class[] { int.class });
            if (downPolymorphic != null)
                downPolymorphic.invoke(camera, new Object[] { angle });
        } catch (Exception e1) {
        }
    }
4修改DecodeHandler.java中的decode函数,

将PlanarYUVLuminanceSource source = CameraManager.get().buildLuminanceSource(data, width, height);修改为

    byte[] rotatedData = new byte[data.length];
        for (int y = 0; y < height; y++) {
            for (int x = 0; x < width; x++)
                rotatedData[x * height + height - y - 1] = data[x + y * width];
        }
        int tmp = width; // Here we are swapping, that’s the difference to #11
        width = height;
        height = tmp;
        PlanarYUVLuminanceSource source = CameraManager.get().buildLuminanceSource(rotatedData, width, height)

5到此问题已经解决,非常好,只是有一个问题:兼容性

如果是ZXing的版本是1.7的,对于之前的版本来讲当手机扫描时,手机描绘的可能点与实际有偏差,所以需要修改ViewfinderView.java的onDraw函数,在Collection<ResultPoint> currentPossible = possibleResultPoints;前增加

  Rect previewFrame = CameraManager.get().getFramingRectInPreview();
     float scaleX = frame.width() / (float) previewFrame.width();
     float scaleY = frame.height() / (float) previewFrame.height();
将本函数中下边的两个for语句中的canvas.drawCircle(frame.left + point.getX(), frame.top + point.getY(), 6.0f, paint);
修改为canvas.drawCircle(frame.left + (int) (point.getX() * scaleX), frame.top + (int) (point.getY() * scaleY), 3.0f, paint);
注意,是修改两个位置的for语句。
如果您还想将扫描的框变大一些,请修改CameraManager.java中的getFramingRect函数,
将framingRect = new Rect(leftOffset, topOffset, leftOffset + width, topOffset + height);修改为framingRect = new Rect(0, topOffset, leftOffset * 2 + width, topOffset + height);这种修改方法会将扫描框的左右两边与屏幕相平。
但是黑色的边框对于用户好像也不太好辨认,所以我又修改了边框的颜色,将ViewfinderView.java文件中的paint.setColor(frameColor);修改为paint.setColor(laserColor);,这样就修改成了与扫描中间的一样的颜色

修改后效果图如下:




    
最新技术文章:
▪Android开发之登录验证实例教程
▪Android开发之注册登录方法示例
▪Android获取手机SIM卡运营商信息的方法
▪Android实现将已发送的短信写入短信数据库的...
▪Android发送短信功能代码
▪Android根据电话号码获得联系人头像实例代码
▪Android中GPS定位的用法实例
▪Android实现退出时关闭所有Activity的方法
▪Android实现文件的分割和组装
▪Android录音应用实例教程
▪Android双击返回键退出程序的实现方法
▪Android实现侦听电池状态显示、电量及充电动...
▪Android获取当前已连接的wifi信号强度的方法
▪Android实现动态显示或隐藏密码输入框的内容
▪根据USER-AGENT判断手机类型并跳转到相应的app...
▪Android Touch事件分发过程详解
▪Android中实现为TextView添加多个可点击的文本
▪Android程序设计之AIDL实例详解
▪Android显式启动与隐式启动Activity的区别介绍
▪Android按钮单击事件的四种常用写法总结
▪Android消息处理机制Looper和Handler详解
▪Android提高之自定义Menu(TabMenu)实现方法 iis7站长之家
▪Android实用的代码片段 常用代码总结
▪Android实现弹出键盘的方法
▪Android中通过view方式获取当前Activity的屏幕截...
▪Android提高之自定义Menu(TabMenu)实现方法
▪Android提高之多方向抽屉实现方法
▪Android提高之MediaPlayer播放网络音频的实现方法...
▪Android提高之MediaPlayer播放网络视频的实现方法...
▪Android提高之手游转电视游戏的模拟操控
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3