Falha na gravação de Tags RFID em determinados coletor

// Expert user has replied.
L Luís Gustavo Nascimento 9 months 2 weeks ago
32 1 0

Estou com um problema na gravação de Tags RFID.

 

Tenho um coletor Zebra que esta na versão do Android 10 e outro no Android 11. Consigo realizar a gravação das tags com o coletor Android 10, mas quando tento realizar o memo processo no outro ocorre um erro que fecha a activity em questão e não consigo ter acesso ao erro.

 

Segue trexo do codigo relacionado a configuração e gravação:

 

 

private void setAccessOperationConfiguration() {
textInfo_GravAV_LGRFID.setText("Configurando Antena");

// Define a potência da antena para 240dbm e configura outras definições
setAntennaPower(300);
//setSingulation(SESSION.SESSION_S0,INVENTORY_STATE.INVENTORY_STATE_A);
//reader.Config.setTriggerMode(START_TRIGGER_TYPE.START_TRIGGER_TYPE_IMMEDIATE);

// Desativa o DPO se o leitor for RFD8500
if (reader.getHostName().contains("RFD8500"))
setDPO(false);
// Define o tempo limite da operação de acesso para 1 segundo
try {
reader.Config.setAccessOperationWaitTimeout(5000);
} catch (InvalidUsageException | OperationFailureException e) {
e.printStackTrace();
}
}

// Método para configurar a potência da antena
private void setAntennaPower(int power) {
textInfo_GravAV_LGRFID.setText("Configurando Potencia");
Log.d(TAG, "setAntennaPower " + power);
try {
// Configurações da antena
Antennas.AntennaRfConfig config = reader.Config.Antennas.getAntennaRfConfig(1);
config.setTransmitPowerIndex(power); // Define o índice de potência de transmissão
config.setrfModeTableIndex(0); // Define o índice da tabela de modo RF
config.setTari(0); // Define o valor de Tari
reader.Config.Antennas.setAntennaRfConfig(1, config); // Aplica as configurações à antena

} catch (InvalidUsageException | OperationFailureException e) {
e.printStackTrace();
}
}
private void setSingulation(SESSION session, INVENTORY_STATE state) {
Log.d(TAG, "setSingulation " + session);
try {
// Set the singulation control
Antennas.SingulationControl s1_singulationControl = reader.Config.Antennas.getSingulationControl(1);
s1_singulationControl.setSession(session);
s1_singulationControl.Action.setInventoryState(state);
s1_singulationControl.Action.setSLFlag(SL_FLAG.SL_ALL);
reader.Config.Antennas.setSingulationControl(1, s1_singulationControl);
} catch (InvalidUsageException e) {
e.printStackTrace();
} catch (OperationFailureException e) {
e.printStackTrace();
}
}

// Método para controlar o DPO
private void setDPO(boolean bEnable) {
textInfo_GravAV_LGRFID.setText("Configurando o DPO");
Log.d(TAG, "setDPO " + bEnable);
try {
// Controla o DPO
reader.Config.setDPOState(bEnable ? DYNAMIC_POWER_OPTIMIZATION.ENABLE : DYNAMIC_POWER_OPTIMIZATION.DISABLE);
} catch (InvalidUsageException | OperationFailureException e) {
e.printStackTrace();
}
}

// Método para realizar a operação de escrita na etiqueta
private void writeTag(String sourceEPC, String password, MEMORY_BANK memoryBank, String data, int offset) {
try {
textInfo_GravAV_LGRFID.setText("Gravação iniciada");

reader.Config.setDPOState(DYNAMIC_POWER_OPTIMIZATION.DISABLE);

// Constrói os parâmetros de acesso de escrita
TagData tagData = null;
TagAccess tagAccess = new TagAccess();

final TagAccess.WriteAccessParams writeAccessParams = tagAccess.new WriteAccessParams();
writeAccessParams.setAccessPassword(Long.parseLong(password, 16));
writeAccessParams.setMemoryBank(memoryBank);
writeAccessParams.setOffset(offset);
writeAccessParams.setWriteData(data);
writeAccessParams.setWriteRetries(3); // Define as tentativas
writeAccessParams.setWriteDataLength(data.length() / 4); // Comprimento dos dados em palavras
boolean useTIDfilter = memoryBank == MEMORY_BANK.MEMORY_BANK_EPC;
textInfo_GravAV_LGRFID.setText("Antes do doInBackground");
new AsyncTask<Void, Void, String>(){
@Override
protected String doInBackground(Void... voids){
textInfo_GravAV_LGRFID.setText("Antes do Try");
try {
textInfo_GravAV_LGRFID.setText("Inicio da gravação");
reader.Actions.TagAccess.writeWait(sourceEPC, writeAccessParams, null, tagData, true, useTIDfilter);

textInfo_GravAV_LGRFID.setText("Depois da gravação");
//reader.Config.setDPOState(DYNAMIC_POWER_OPTIMIZATION.ENABLE);
GravOk();
return "Success"; // Se não houver exceção, retornar "Success"
} catch (Exception e) {
textInfo_GravAV_LGRFID.setText("Erro: " + e.getMessage());
// Se ocorrer uma exceção, retornar a mensagem de erro
return e.getLocalizedMessage();
}
}
@Override
protected void onPostExecute(String result) {
if (result.equals("Success")) {
textInfo_GravAV_LGRFID.setText("Gravação Concluída!");
ProcesseStats = result;
} else {
// Exibir o código e a descrição do erro na tela
textInfo_GravAV_LGRFID.setText("Erro: " + result);
// Colocar o erro na área de transferência
ClipboardManager clipboard = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
ClipData clip = ClipData.newPlainText("Error", result);
clipboard.setPrimaryClip(clip);
}
}
}.execute();
} catch (InvalidUsageException | OperationFailureException e) {
e.printStackTrace();
}

}
private void WriteEPC(){
// one time setup to suite the access operation, if reader is already in that state it can be avoided
//setAccessOperationConfiguration();
//
// EPC da etiqueta a ser escrita
String EPC = old_tag;
// Dados a serem escritos na etiqueta
String dataToWrite = newTag;
// Senha de acesso (se aplicável)
String password = "00"; //nenhuma senha de acesso é usada
// Banco de memória onde os dados serão gravados
MEMORY_BANK memoryBank = MEMORY_BANK.MEMORY_BANK_EPC;
// Offset (deslocamento) a partir do qual os dados serão escritos
int offset = 2;
setAccessOperationConfiguration();

// perform write, offset is two for EPC ID
writeTag(EPC, password, memoryBank, dataToWrite, offset);
}

Please Register or Login to post a reply

1 Replies

A Alex Lavie

Normally it should work the same on both platforms.

On android 11 there might be new rules about where you save data and where you can access files etc...

easier if you send an apk with your sample or try to run the sample application from our site to check that it does work on both platforms and then correct.

https://techdocs.zebra.com/dcs/rfid/android/2-0-2-124/samples/hellorfid/

 

CONTACT
Can’t find what you’re looking for?