Android Studio Java намерение в onClick - PullRequest
0 голосов
/ 16 января 2019

Мне нравится выполнять код в onClick. Я вообще не программист и сделал это с помощью YouTube и Google help. Мне нужно это на работе, чтобы облегчить мне жизнь. Потому что нет внешнего приложения, которое может справиться с этим :( Мне нравится читать Nfc, только когда я нажимаю на btnNfc. Приложение теперь работает нормально для меня, но NFC читает все время. Это должно прочитать после того, как я нажму кнопку. Надеюсь, кто-нибудь может помочь мне с моим ужасным кодом.

Спасибо

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    context = this;

    btnBarcode = (Button) findViewById(R.id.btnBarcode);
    btnBarcode.setOnClickListener(this);
    btnNfc = (Button) findViewById(R.id.btnNfc);
    btnNfc.setOnClickListener(this);


    //read_content = (TextView)findViewById(R.id.textView);
    read_content = (EditText)findViewById(R.id.read_content);
    btnOptions = (Button)findViewById(R.id.btnOptions);

    textipadress = (EditText) findViewById(R.id.textipadress);

    nfcAdapter = NfcAdapter.getDefaultAdapter(this);
    if (nfcAdapter == null) {
        // Stop here, we definitely need NFC
        Toast.makeText(this, "This device doesn't support NFC.", Toast.LENGTH_LONG).show();
        finish();
    }
    //readFromIntent(getIntent());
    pendingIntent = PendingIntent.getActivity(this, 0, new Intent(this, getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), 0);
    IntentFilter tagDetected = new IntentFilter(NfcAdapter.ACTION_TAG_DISCOVERED);
    tagDetected.addCategory(Intent.CATEGORY_DEFAULT);
    writeTagFilters = new IntentFilter[] { tagDetected };

}


@Override
public void onClick(View v) {

    switch (v.getId()) {
        case R.id.btnBarcode:
            IntentIntegrator integrator = new IntentIntegrator(this);
            integrator.initiateScan();
            break;

        case R.id.btnNfc:

            break;

        default:
            break;
    }
}

public void onActivityResult(int requestCode, int resultCode, Intent intent) {
    IntentResult scanResult = IntentIntegrator.parseActivityResult(requestCode, resultCode, intent);
    if (scanResult != null) {
        String barcode;

        barcode = scanResult.getContents();
        TextView read_content = (TextView) findViewById(R.id.read_content);
        read_content.setText(barcode);
    }
    // else continue with any other code you need in the method
}

public void send_data(View v) {
    String message = read_content.getText().toString();

    BackgroundTask b1 = new BackgroundTask();
        b1.execute(message);
}

class BackgroundTask extends AsyncTask<String,Void,Void> {
    Socket sClient;
    PrintWriter writer;

    @Override
    protected Void doInBackground(String... voids) {
            try {
                String ip = textipadress.getText().toString();
                String message = voids[0];
                //sClient = new Socket("192.168.178.38", 6000);
                sClient = new Socket(ip, 6000);
                writer = new PrintWriter(sClient.getOutputStream());
                writer.write(message);
                writer.flush();
                writer.close();


            }catch(IOException e)
            {
                e.printStackTrace();
            }
        return null;
    }
}




/******************************************************************************
 **********************************Read From NFC Tag***************************
 ******************************************************************************/
private void readFromIntent(Intent intent) {

    String action = intent.getAction();
    if (NfcAdapter.ACTION_TAG_DISCOVERED.equals(action)
            || NfcAdapter.ACTION_TECH_DISCOVERED.equals(action)
            || NfcAdapter.ACTION_NDEF_DISCOVERED.equals(action)) {
        Parcelable[] rawMsgs = intent.getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES);
        NdefMessage[] msgs = null;
        if (rawMsgs != null) {
            msgs = new NdefMessage[rawMsgs.length];
            for (int i = 0; i < rawMsgs.length; i++) {
                msgs[i] = (NdefMessage) rawMsgs[i];
            }
        }
        buildTagViews(msgs);
    }

}

private void buildTagViews(NdefMessage[] msgs) {
    if (msgs == null || msgs.length == 0) return;

    String text = "";
    byte[] payload = msgs[0].getRecords()[0].getPayload();
    String textEncoding = ((payload[0] & 128) == 0) ? "UTF-8" : "UTF-16"; // Get the Text Encoding
    int languageCodeLength = payload[0] & 0063; // Get the Language Code, e.g. "en"
    // String languageCode = new String(payload, 1, languageCodeLength, "US-ASCII");

    try {
        // Get the Text
        text = new String(payload, languageCodeLength + 1, payload.length - languageCodeLength - 1, textEncoding);
    } catch (UnsupportedEncodingException e) {
        Log.e("UnsupportedEncoding", e.toString());
    }

    read_content.setText(text);
}

@Override
protected void onNewIntent(Intent intent) {
    setIntent(intent);
    readFromIntent(intent);
    if(NfcAdapter.ACTION_TAG_DISCOVERED.equals(intent.getAction())){
        myTag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
    }
}

@Override
public void onPause(){
    super.onPause();
    WriteModeOff();
}

@Override
public void onResume(){
    super.onResume();
    WriteModeOn();
}

/******************************************************************************
 **********************************Enable Write********************************
 ******************************************************************************/
private void WriteModeOn(){
    writeMode = true;
    nfcAdapter.enableForegroundDispatch(this, pendingIntent, writeTagFilters, null);
}
/******************************************************************************
 **********************************Disable Write*******************************
 ******************************************************************************/
private void WriteModeOff(){
    writeMode = false;
    nfcAdapter.disableForegroundDispatch(this);
}
...