コード例 #1
0
        @Override
        public void onReceive(Context context, Intent intent) {
          String action = intent.getAction();
          if (DEBUG) Toast.makeText(context, "Broadcast Receiver", Toast.LENGTH_SHORT).show();

          if (UsbManager.ACTION_USB_DEVICE_ATTACHED.equals(action)) { // will intercept by system
            if (DEBUG) Toast.makeText(context, "USB Attached", Toast.LENGTH_SHORT).show();
            UsbDevice device = intent.getParcelableExtra(UsbManager.EXTRA_DEVICE);
            mUsbCommunication.setUsbInterface(mManager, device);
            setUsbState(true);

          } else if (UsbManager.ACTION_USB_DEVICE_DETACHED.equals(action)) {
            if (DEBUG) Toast.makeText(context, "USB Detached", Toast.LENGTH_SHORT).show();
            mUsbCommunication.setUsbInterface(null, null);
            setUsbState(false);
            //				getReaderSn(false);

          } else if (ACTION_USB_PERMISSION.equals(action)) {
            if (DEBUG) Toast.makeText(context, "USB Permission", Toast.LENGTH_SHORT).show();
            Log.d(UsbCommunication.TAG, "permission");
            synchronized (this) {
              UsbDevice device = intent.getParcelableExtra(UsbManager.EXTRA_DEVICE);
              if (intent.getBooleanExtra(UsbManager.EXTRA_PERMISSION_GRANTED, false)) {
                mUsbCommunication.setUsbInterface(mManager, device);
                setUsbState(true);
                sleep(400);
                if (bSavedInst) getReaderSn(true);
                setPowerLevel();
                setPowerState();
                if (iMenu == R.menu.menu_option_xlarge) insertFragTag();
              } else {
                finish();
              }
            }
          }
        }
コード例 #2
0
public class RfidContainer extends Activity implements FRAG_Tag.OnTagSelectedListener {
  private static final boolean DEBUG = false;
  private static final String ACTION_USB_PERMISSION = "com.mti.rfid.minime.USB_PERMISSION";
  private static final int PID = 49193;
  private static final int VID = 4901;

  private TextView tv_usbstate;
  private SharedPreferences mSharedpref;

  private enum Fragments {
    About,
    Config,
    Detail,
    Tag,
    Web
  };

  private FragmentTransaction ft;
  private Fragment objFragment;
  private boolean bSavedInst = false;

  private UsbCommunication mUsbCommunication = UsbCommunication.newInstance();
  private UsbManager mManager;
  private PendingIntent mPermissionIntent;

  private int iLayout;
  private int iMenu;

  // #### activity ####
  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    tv_usbstate = (TextView) findViewById(R.id.tv_usbstate);

    mManager = (UsbManager) getSystemService(Context.USB_SERVICE);
    mPermissionIntent = PendingIntent.getBroadcast(this, 0, new Intent(ACTION_USB_PERMISSION), 0);

    IntentFilter filter = new IntentFilter();
    filter.addAction(UsbManager.ACTION_USB_DEVICE_ATTACHED); // will intercept by system
    filter.addAction(UsbManager.ACTION_USB_DEVICE_DETACHED);
    filter.addAction(ACTION_USB_PERMISSION);
    registerReceiver(usbReceiver, filter);

    mSharedpref = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());

    try {
      findViewById(R.id.DetailLayout).getResources();
      iLayout = R.id.DetailLayout;
      iMenu = R.menu.menu_option_xlarge;
    } catch (Exception e) {
      iLayout = R.id.TagLayout;
      iMenu = R.menu.menu_option;
      e.printStackTrace();
    } finally {
      if (savedInstanceState == null) {
        bSavedInst = true;
        showFragment(Fragments.About, 0, null);
      }
    }
  }

  @Override
  protected void onResume() {
    super.onResume();

    HashMap<String, UsbDevice> deviceList = mManager.getDeviceList();
    Iterator<UsbDevice> deviceIterator = deviceList.values().iterator();
    while (deviceIterator.hasNext()) {
      UsbDevice device = deviceIterator.next();
      if (device.getProductId() == PID && device.getVendorId() == VID) {
        if (mManager.hasPermission(device)) mManager.requestPermission(device, mPermissionIntent);
        break;
      }
    }
  }

  @Override
  protected void onPause() {
    super.onPause();

    if (tv_usbstate.getText().equals("Connected")) mUsbCommunication.setUsbInterface(null, null);
  }

  @Override
  protected void onDestroy() {
    super.onDestroy();

    unregisterReceiver(usbReceiver);
  }

  @Override
  public void onTagSelected(int tagPosition, String strTag) {
    showFragment(Fragments.Detail, tagPosition, strTag);
  }

  @Override
  public void onTagLongPress(int tagPosition, String strTag) {
    showFragment(Fragments.Web, tagPosition, strTag);
  }

  // #### menu ####
  @Override
  public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(iMenu, menu);

    return super.onCreateOptionsMenu(menu);
  }

  @Override
  public boolean onMenuItemSelected(int featureId, MenuItem item) {
    switch (item.getItemId()) {
      case R.id.item_tag:
        showFragment(Fragments.Tag, 0, null);
        break;
      case R.id.item_config:
        showFragment(Fragments.Config, 0, null);
        break;
      case R.id.item_about:
        showFragment(Fragments.About, 0, null);
        break;
      case R.id.item_quit:
        finish();
        break;
    }
    return super.onMenuItemSelected(featureId, item);
  }

  // #### fragment ####
  private void showFragment(Fragments fragmentType, int index, String tagid) {
    switch (fragmentType) {
      case Tag:
        objFragment = FRAG_Tag.newInstance();
        break;
      case Config:
        objFragment = FRAG_Config.newInstance();
        break;
      case About:
        objFragment = FRAG_About.newInstance();
        break;
      case Detail:
        objFragment = FRAG_Details.newInstance(index, tagid);
        break;
      case Web:
        final String prefixUrl = mSharedpref.getString("cfg_web_url", "");

        if (prefixUrl.isEmpty()) {
          Toast.makeText(
                  this, "Please fill the web url in the configuration page.", Toast.LENGTH_SHORT)
              .show();
          return;
        } else objFragment = FRAG_Web.newInstance(index, tagid);
        break;
    }
    ft = getFragmentManager().beginTransaction();
    ft.replace(iLayout, objFragment);
    ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
    //		    if(iLayout == R.id.TagLayout && fragmentType.equals(Fragments.Detail))
    //		    	ft.addToBackStack(null);

    ft.commit();
  }

  private void insertFragTag() {
    FragmentTransaction ftTag = getFragmentManager().beginTransaction();
    ftTag.replace(R.id.TagLayout, FRAG_Tag.newInstance());
    ftTag.commit();
  }

  private void setUsbState(boolean state) {
    if (state) {
      tv_usbstate.setText("Connected");
      tv_usbstate.setTextColor(android.graphics.Color.GREEN);
    } else {
      tv_usbstate.setText("Disconnected");
      tv_usbstate.setTextColor(android.graphics.Color.RED);
    }
  }

  private void setPowerLevel() {
    MtiCmd mMtiCmd = new CMD_AntPortOp.RFID_AntennaPortSetPowerLevel(mUsbCommunication);
    CMD_AntPortOp.RFID_AntennaPortSetPowerLevel finalCmd =
        (CMD_AntPortOp.RFID_AntennaPortSetPowerLevel) mMtiCmd;

    finalCmd.setCmd((byte) 18);
  }

  private void setPowerState() {
    MtiCmd mMtiCmd = new CMD_PwrMgt.RFID_PowerEnterPowerState(mUsbCommunication);
    CMD_PwrMgt.RFID_PowerEnterPowerState finalCmd = (CMD_PwrMgt.RFID_PowerEnterPowerState) mMtiCmd;

    if (mSharedpref.getBoolean("cfg_sleep_mode", false)) {
      finalCmd.setCmd(PowerState.Sleep);
      sleep(200);
    }
  }

  private void getReaderSn(boolean bState) {
    MtiCmd mMtiCmd;

    if (bState) {
      byte[] bSN = new byte[16];

      for (int i = 0; i < 16; i++) {
        mMtiCmd = new CMD_FwAccess.RFID_MacReadOemData(mUsbCommunication);
        CMD_FwAccess.RFID_MacReadOemData finalCmd = (CMD_FwAccess.RFID_MacReadOemData) mMtiCmd;
        if (finalCmd.setCmd(i + 0x50)) bSN[i] = finalCmd.getData();
      }
      mSharedpref
          .edit()
          .putString("about_reader_sn_sum", EncodingUtils.getAsciiString(bSN))
          .commit();
    } else mSharedpref.edit().putString("about_reader_sn_sum", "n/a").commit();

    showFragment(Fragments.About, 0, null);
  }

  private void sleep(int millisecond) {
    try {
      Thread.sleep(millisecond);
    } catch (InterruptedException e) {
    }
  }

  // #### broadcast receiver ####
  BroadcastReceiver usbReceiver =
      new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
          String action = intent.getAction();
          if (DEBUG) Toast.makeText(context, "Broadcast Receiver", Toast.LENGTH_SHORT).show();

          if (UsbManager.ACTION_USB_DEVICE_ATTACHED.equals(action)) { // will intercept by system
            if (DEBUG) Toast.makeText(context, "USB Attached", Toast.LENGTH_SHORT).show();
            UsbDevice device = intent.getParcelableExtra(UsbManager.EXTRA_DEVICE);
            mUsbCommunication.setUsbInterface(mManager, device);
            setUsbState(true);

          } else if (UsbManager.ACTION_USB_DEVICE_DETACHED.equals(action)) {
            if (DEBUG) Toast.makeText(context, "USB Detached", Toast.LENGTH_SHORT).show();
            mUsbCommunication.setUsbInterface(null, null);
            setUsbState(false);
            //				getReaderSn(false);

          } else if (ACTION_USB_PERMISSION.equals(action)) {
            if (DEBUG) Toast.makeText(context, "USB Permission", Toast.LENGTH_SHORT).show();
            Log.d(UsbCommunication.TAG, "permission");
            synchronized (this) {
              UsbDevice device = intent.getParcelableExtra(UsbManager.EXTRA_DEVICE);
              if (intent.getBooleanExtra(UsbManager.EXTRA_PERMISSION_GRANTED, false)) {
                mUsbCommunication.setUsbInterface(mManager, device);
                setUsbState(true);
                sleep(400);
                if (bSavedInst) getReaderSn(true);
                setPowerLevel();
                setPowerState();
                if (iMenu == R.menu.menu_option_xlarge) insertFragTag();
              } else {
                finish();
              }
            }
          }
        }
      };
}
コード例 #3
0
  @Override
  protected void onPause() {
    super.onPause();

    if (tv_usbstate.getText().equals("Connected")) mUsbCommunication.setUsbInterface(null, null);
  }