Barcode1D应用开发总结

Barcode1D应用开发总结

 

 

1.     事件处理

实现的方式:

(1)  事件处理方法直接绑定到标签

<Button
        android:id="@+id/barcode1d"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_marginTop="24dp"
        android:text="barcode 1d"
        android:onClick="barcode1dClickHandler"
        />


事件处理方法定义如下:

public voidbarcode1dClickHandler(View Source)
{ 
   Buttonbn = (Button)findViewById(R.id.barcode1d);
   switch(Source.getId())
   {
      case R.id.barcode1d:
         bn.setText("clicked");
         break;
   }
      Log.v(ACTIVITY_TAG,"barcode1dClickHandler()"+Source.getId());
}


如果没有定义形参View source,运行的时候直接弹出类似图1的错误信息,

当view(这里为Button)被点击时,把被点击对象通过source传递进来,可通过source.getId()来获取view的id,在同一个事件处理方法监测多个button的事件时用到。

 

(2)  匿名类作为事件监听器类

在实现过程中涉及到成员变量定义和初始化的编译问题,顺便一起贴出来

1)     定义时直接初始化

private Button bn = (Button)findViewById(R.id.barcode1d);


2)     在初始化块初始化

private Button bn;
{
   bn =(Button)findViewById(R.id.barcode1d);
}


3)     在构造器或是成员方法中初始化

4)     不能再类实现体中且是初始化块或是构造器外或是成员方法外初始化

 

private Button bn;
bn = (Button)findViewById(R.id.barcode1d);

这样的写法在C++中是没问题的,但对于Java来说是错误的。

bn= (Button)findViewById(R.id.barcode1d);
      bn.setOnClickListener(new OnClickListener()
      {
         @Override
         public void onClick(View source)
         {
            switch(source.getId())
            {
                case R.id.barcode1d:
                   bn.setText("clicked");
                   break;
            }
         }
      });


 

(3)  Activity本身作为事件监听器

 

public classAppCenterActivity extends ActionBarActivity implements OnClickListener{
   protected static final String ACTIVITY_TAG="AppCenterActivity"; 
   private Button bn;
  
   @Override
   protected void onCreate(BundlesavedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.app_center);
 
      bn =(Button)findViewById(R.id.barcode1d);
      bn.setOnClickListener((OnClickListener)this);
     
   }
 
   @Override
   public void onClick(View source)
   {
      bn.setText("clicked");
      Log.v(ACTIVITY_TAG,"barcode1dClickHandler()");
   }
}


这里要注意的是,我们是在AppCenterActivity对象作为监听器,需要让AppCenterActivity实现OnClickListener事件监听接口,这样就可以在AppCenterActivity中直接重载事件处理方法onClick(),当为某个组件添加该事件监听器对象时,直接使用this作为事件监听器对象即可。

 

 

2.     一个Activity启动另一个Activity

@Override
   protected void onCreate(BundlesavedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.app_center);
 
      bn =(Button)findViewById(R.id.barcode1d);
      bn.setOnClickListener(new OnClickListener()
      {
         @Override
         public void onClick(View source)
         {
            Intentintent = newIntent(AppCenterActivity.this, Barcode1D.class);
            startActivity(intent);
         }
      });
   }


这里重点来看语句

Intent intent = new Intent(AppCenterActivity.this, Barcode1D.class);

第1个参数表示AppCenterActivity类的对象,第2个是泛型参数,这里为显式intent,想要启动的是类Barcode1D。

3.     加载so文件的问题

在java.文件中增加下面代码

static {

      System.loadLibrary("DeviceAPI");

   }

且把libDeviceAPI.so放在libs文件夹下,但运行的时候出错

Barcode1D应用开发总结_第1张图片

图1

 

必须要把libDeviceAPI.so放在libs\armeabi目录下,但我新建的Android应用工程序工程编译后都没有看到armeabi目录,有两种办法:

(1)     手动创建armabi目录,并把libDeviceAPI.so拷贝到此目录下,这适合于libDeviceAPI.so由第三方或是在另一个工程提供的情况。

(2)     自动生成,这适合于libDeviceAPI.so由本工程提供的情况

Barcode1D应用开发总结_第2张图片

图2

选择Add Native Support,如下图:

Barcode1D应用开发总结_第3张图片

图3

选择finish后会生成jni文件夹,如下图:

Barcode1D应用开发总结_第4张图片

图4

 

编译后会在libs目录下生成armeabi目录,并生成libDeviceAPI.so文件,如上图,编译过程生成libDeviceAPI.so的信息如下:

**** Build of configuration Default for project test ****
 
D:\ADT-bundle\android-ndk-r10b\ndk-build.cmd all
Android NDK: WARNING: APP_PLATFORM android-19 is largerthan android:minSdkVersion 8 in ./AndroidManifest.xml   
[armeabi] Compile++ thumb: DeviceAPI <= DeviceAPI.cpp
[armeabi] StaticLibrary : libstdc++.a
[armeabi] SharedLibrary : libDeviceAPI.so
[armeabi] Install       : libDeviceAPI.so => libs/armeabi/libDeviceAPI.so
 
**** Build Finished ****


 

4.     实现扫描条码并显示功能

package com.example.appcenter;
 
import com.rscja.deviceapi.Barcode1D;
import com.rscja.deviceapi.exception.ConfigurationException;
 
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
 
public classBarcode1DActivity extends ActionBarActivity{
  
   private static final String TAG = Barcode1D.class.getSimpleName();
   private Button startButton;
   private Button clearButton;
   private Button closeButton;
   private Barcode1D mInstance;
   private TextView bcTextView;
   private String barCode = "";
 
   @Override
   protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.barcode1d);
     
 
      try {
         mInstance = Barcode1D.getInstance();
 
      }catch(ConfigurationException e) {
         return;
      }
 
     
      mInstance.open();
 
      startButton =(Button)findViewById(R.id.barcode1d_scan);
      clearButton =(Button)findViewById(R.id.barcode1d_clear);
      closeButton =(Button)findViewById(R.id.barcode1d_close);
      bcTextView =(TextView)findViewById(R.id.barcode_content);
     
      startButton.setOnClickListener(new OnClickListener()
      {
         @Override
         public void onClick(View source)
         {
            scan();
         }
      });
     
     
      clearButton.setOnClickListener(new OnClickListener()
      {
         @Override
         public void onClick(View source)
         {
            bcTextView.setText("");
         }
      });
 
      closeButton.setOnClickListener(new OnClickListener()
      {
         @Override
         public void onClick(View source)
         {
            mInstance.close();
            finish();
         }
        
      });
      //Log.v(TAG,"onCreate()"); 
   }
 
   private void scan() {
      barCode = mInstance.scan();
 
      Log.i(TAG, "barCode "+ barCode.trim());
     
      bcTextView.setText(barCode);
   }
}


下面来看布局就可知道此程序实现的功能了:

Barcode1D应用开发总结_第5张图片

图5

 

你可能感兴趣的:(Barcode1D应用开发总结)