当前位置:  编程技术>移动开发
本页文章导读:
    ▪关于Samsung Galaxy Tab的闪关灯有关问题        关于Samsung Galaxy Tab的闪关灯问题一、问题         有客户的需求,项目的开发才不会循规蹈矩,才会遇到各种各样的问题。不过今天遇到的问题,确实让人摸不到头脑。         项目需要扫.........
    ▪ 谋职那些事十四        求职那些事十四        这段时日,一直投入时间与精力在找工作。求职目标明确,就是要找到那喜欢而擅长的工作,决定选择互联网或者移动互联网行业,优先考虑深圳这座城市,而至.........
    ▪ libjingle源码分析之二:Thread跟SocketServer       libjingle源码分析之二:Thread和SocketServer 摘要       本文主要分析了libjingle源码中的Thread和SocketServer模块。同时,给出一个使用Thread模块的使用示例。 概述       libjingle源码中,Thread和S.........

[1]关于Samsung Galaxy Tab的闪关灯有关问题
    来源: 互联网  发布时间: 2014-02-18
关于Samsung Galaxy Tab的闪关灯问题
一、问题
        有客户的需求,项目的开发才不会循规蹈矩,才会遇到各种各样的问题。不过今天遇到的问题,确实让人摸不到头脑。
        项目需要扫描条码,于是使用了条码扫描二维码扫描——ZXing android 源码简化中所使用的ZXing,项目进行的很顺利,能够正常的扫描条码,同时能够获得条码相应的信息。由于项目使用环境的原因,客户提出要求要在打开摄像头进行条码扫描的时候同时打开闪光灯,同时要将闪光灯保持常亮状态,而不是在对焦的时候闪烁。这个问题也好解决,编写好代码之后在联想乐Pad K1 WLAN 16GB能够正常运行,打开摄像头之后能够保持闪光灯的常亮。但是,问题出现了,这段代码在运行到三星GALAXY Tab P7510的时候闪光灯硬是没有反应,同样的代码,出现这样的问题,是在是让人费解。
        在stackoverflow上看到了很多人都遇到了这样的问题,比较典型的是How to use camera flash/led as torch on a Samsung Galaxy Tab?得知这是设备的差异性问题造成的。但是出现这样的问题,我们也不能告诉客户,因为设备差异性原因我们的代码无法在指定的三星GALAXY Tab P7510运行。于是找答案。
二、
        我们安装了我查查这个比较流行的条码扫面软件,发现它可以在打开摄像头时同时保持闪光灯的常量,但是其不是一打开摄像头就让闪光灯亮的,是让用户选择是否打开闪关灯,于是乎答案出来了。我们采用同样的,在打开摄像头之后,让用户选中是否打开闪光灯,这样就可以设置闪光灯的状态,同时可以让其在三星GALAXY Tab P7510上正常运行。
三、代码
在条码扫描二维码扫描——ZXing android 源码简化的基础之上改造,main.xml文件如下:
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >

    <SurfaceView
        android:id="@+id/preview_view"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_centerInParent="true"
        android:layout_gravity="center" />

    <com.zijunlin.Zxing.Demo.view.ViewfinderView
        android:id="@+id/viewfinder_view"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:background="@color/transparent" />

    <TextView
        android:id="@+id/txtResult"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="14sp" />

    <Button
        android:id="@+id/magic"
        android:layout_gravity="right|center_vertical"
        android:background="@drawable/ic_flash_off"
        android:layout_width="55dp"
        android:layout_height="55dp"
        android:onClick="click" />

</FrameLayout>
CaptureActivity.java添加代码如下:
int i = 0;
	/**
	 * 根据用户的选择,设定闪光灯的状态
	 * @param v
	 */
	public void click(View v) {

		switch (i % 3) {
		case 0:
			CameraManager.get().setFlashOn("torch");
			magic.setBackgroundResource(R.drawable.ic_flash_troch);
			break;
		case 1:
			CameraManager.get().setFlashOn("on");
			magic.setBackgroundResource(R.drawable.ic_flash_on);
			break;
		case 2:
			CameraManager.get().setFlashOn("off");
			magic.setBackgroundResource(R.drawable.ic_flash_off);
			break;
		}
		i++;

	}
CameraManager添加代码如下:
 public void setFlashOn(String type){
	  Camera.Parameters param = camera.getParameters();
	  param.setFlashMode(type);
	  camera.setParameters(param);
  }
四、效果图 关闭闪光灯状态(默认)


闪光灯常亮状态

闪光灯随对焦闪烁状态


    
[2] 谋职那些事十四
    来源: 互联网  发布时间: 2014-02-18
求职那些事十四

        这段时日,一直投入时间与精力在找工作。求职目标明确,就是要找到那喜欢而擅长的工作,决定选择互联网或者移动互联网行业,优先考虑深圳这座城市,而至于公司,不管是大公司,还是小公司,个人的成长与发展放在首要位置。

        截止到目前,一共参加了4家公司的笔试,2家公司的全程面试,一家是深圳市瑞高信息技术有限公司的Android开发工程师,另一家是百度网络技术有限公司的开发测试工程师,这两家公司的结果还处在等待中。经历这4次笔试,2次面试后,我获得了如下启示。

        第一点:笔试很重要,尽最大程度地做好准备。尤其是数据结构与算法设计、C或Java语言、面向对象设计思想这些内容。虽说有时候笔试题目比较基础,但是知识面却很广泛。例如腾讯的笔试题目,就囊括了数据结构、操作系统、软件工程、计算机网络、设计模式、数据库、HTML语言、C语言和C++语言等知识,而这些知识是从事软件开发与应用工作的基石。因而,若是选择做一名软件工程师,这些知识不能不储备、消化、吸收与应用。

       第二点:面试的时候,一定要注意回答问题的方式方法。根本目的就是要通过回答面试官的问题以来推销自己,那么 在这个过程中一定要自信、诚恳、谦卑和好学。既要合理表达,又要巧妙聆听,总之,在有限的时间里,把最好的自己展现出来。

       第三点:不要轻易放弃,时刻准备着学习和解决问题。机会总是青睐有准备之人,上天也是喜欢自助者。所以,对待每次求职,不管是成功,还是失败,都应该正确地认识与对待,同时,面试过后要进行反思和总结。

       第四点:一定要相信自己能够找到那适合的工作,不要慌乱、不要动摇信念。

       我想,在求职的过程中,不断地践行和完备上述的四点,一定会有好果子的。

 

       温馨提示:耐心地等候,相信自己。


    
[3] libjingle源码分析之二:Thread跟SocketServer
    来源: 互联网  发布时间: 2014-02-18
libjingle源码分析之二:Thread和SocketServer

  • 摘要

      本文主要分析了libjingle源码中的Thread和SocketServer模块。同时,给出一个使用Thread模块的使用示例。

  • 概述

      libjingle源码中,Thread和SocketServer模块的原理如下图所示。整个模型实际上是一个消息模型,Thread主要负责处理消息,MessageQue表示的是当前的消息队列,MessageHandler由用户用来定义处理消息的动作。而ThreadManager为单实例,可以获取当前的Thread,这样用户可以往当前的Thread中投递消息。SocketServer代表的是用来侦听Socket的服务,它是一个独立的模块。


      消息的处理流程主要由Thread负责。上图中有两条处理流程,分别用两根带箭头的线表示。左边箭头的处理流程为:当消息队列中没有消息时,Thread将控制权转交给SocketServer,直到有消息时会通知SocketServer返回到Thread。也就是说Thread优先的是处理消息,在空闲时,会让SocketServer侦听socket。右边的箭头是正常的消息处理流程,获取消息并处理用户定义的对应的OnMessage函数。
      SocketServer模块只是用在libjingle内部,用户并不需要直接使用它。P2P中使用了PhysicalSocketServer作为SocketServer,它的原理如下图所示:


      PhysicalSocketServer主要是侦听基于本地网卡的socket(libjingle中还有一些伪socket),然后分发socket事件到Dispatcher中。Dispatcher是PhysicalSocketServer的分发体,功能有点类似于MessageHandler。Dispatcher中定义了感兴趣的socket事件和对应的处理。

类的关系

      本文提到的一些类的关系如下图所示。Thread类继承自MessageQue,可以通过Thread类来操作队列消息。PhysicalSocketServer除了实现SocketServer接口之外,还可以添加和删除Dispatcher。熟悉了这些类,基本上就了解Thread模块和SocketServer模块的工作原理。


  • 使用

      Thread的使用示例参见下面的代码。获取当前线程是通过Thread的Current函数,它会转调ThreadManager对象的CurrentThread函数。由于Thread继承自MessageQue,可以直接通过Thread对象来投递消息,Post函数的第一个参数是OnMessage所处的对象,会被保存于Message对象中。处理消息只要重载MessageHandler的OnMessage函数即可。main函数则调用Thread的Run函数进入默认的消息处理循环,默认的消息处理循环在本示例中就是:循环取消息,调用MessageHandler的OnMessage函数。

#include <string>
#include <iostream>
#include "talk/base/thread.h"

class HelpData : public talk_base::MessageData
{
public:
  std::string info_;
};

class Police : public talk_base::MessageHandler
{
public:
  enum {
    MSG_HELP,
  };

  void Help(const std::string& info) {
    HelpData* data = new HelpData;
    data->info_ = info;
    talk_base::Thread::Current()->Post(this, MSG_HELP, data);
  }

  virtual void OnMessage(talk_base::Message* msg) {
    switch (msg->message_id) {
    case MSG_HELP:
      HelpData* data = (HelpData*)msg->pdata;
      std::cout << "MSG_HELP : " << data->info_ << std::endl;
      break;
    }
  }
};

int main(int argc, char** argv)
{
  Police p;
  p.Help("Please help me!");
  talk_base::Thread::Current()->Run();
  return 0;
}
        未完待续...

    
最新技术文章:
▪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实现Back功能代码片段总结
▪Android实用的代码片段 常用代码总结
▪Android实现弹出键盘的方法
▪Android中实现为TextView添加多个可点击的文本 iis7站长之家
▪Android提高之自定义Menu(TabMenu)实现方法
▪Android提高之多方向抽屉实现方法
▪Android提高之MediaPlayer播放网络音频的实现方法...
▪Android提高之MediaPlayer播放网络视频的实现方法...
▪Android提高之手游转电视游戏的模拟操控
 


站内导航:


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

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

浙ICP备11055608号-3