Quantcast
Channel: Active questions tagged crash - Stack Overflow
Viewing all articles
Browse latest Browse all 7197

NFC Tag reader can't be started in another class?

$
0
0

I have written a program to read out nfc Tags and visualize them onto a Toast which works perfectly fine.Code:

    package com.example.myapplication;import android.app.Activity;import android.app.PendingIntent;import android.content.Context;import android.content.Intent;import android.content.IntentFilter;import android.nfc.NdefMessage;import android.nfc.NfcAdapter;import android.nfc.Tag;import android.os.Bundle;import android.os.Parcelable;import android.util.Log;import android.widget.Toast;import java.io.UnsupportedEncodingException;public class MainActivity extends Activity {    NfcAdapter nfcAdapter;    PendingIntent pendingIntent;    IntentFilter writeTagFilters[];    Tag myTag;    Context context;    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        context = this;        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};    }    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 = "";//        String tagId = new String(msgs[0].getRecords()[0].getType());        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());        }        Toast.makeText(getApplicationContext(), text, Toast.LENGTH_LONG).show();    }    @Override    protected void onNewIntent(Intent intent) {        setIntent(intent);        readFromIntent(intent);        if(NfcAdapter.ACTION_TAG_DISCOVERED.equals(intent.getAction())){            myTag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);        }    }}

But when I want this to be started in another File the app just crashes without giving me an error.

This is my used code:

package com.example.myapplication;import android.app.Activity;import android.app.PendingIntent;import android.content.Context;import android.content.Intent;import android.content.IntentFilter;import android.nfc.NdefMessage;import android.nfc.NfcAdapter;import android.nfc.Tag;import android.os.Bundle;import android.os.Parcelable;import android.util.Log;import android.widget.Toast;import java.io.UnsupportedEncodingException;public class MainActivity extends Activity {    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        Nfc nfc = new Nfc();        nfc.startnfc();    }}

I didn't change the onCreate since it was imported from my main app, so you have an easier time to understand my code. It obviously wouldn't make a difference..

package com.example.myapplication;import static java.sql.DriverManager.println;import android.app.Activity;import android.app.PendingIntent;import android.content.Context;import android.content.Intent;import android.content.IntentFilter;import android.nfc.NdefMessage;import android.nfc.NfcAdapter;import android.nfc.Tag;import android.os.Bundle;import android.os.Parcelable;import android.util.Log;import android.widget.Toast;import java.io.UnsupportedEncodingException;public class Nfc extends Activity {    NfcAdapter nfcAdapter;    PendingIntent pendingIntent;    IntentFilter writeTagFilters[];    Tag myTag;    Context context;        public void startnfc() {        setContentView(R.layout.activity_main);        context = this;        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};    }    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 = "";//        String tagId = new String(msgs[0].getRecords()[0].getType());        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());        }        Toast.makeText(getApplicationContext(), text, Toast.LENGTH_LONG).show();    }    @Override    protected void onNewIntent(Intent intent) {        setIntent(intent);        readFromIntent(intent);        if(NfcAdapter.ACTION_TAG_DISCOVERED.equals(intent.getAction())){            myTag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);        }    }}

this is my second week Ive been programming with Java. Sorry in advance for dumb mistakes


Viewing all articles
Browse latest Browse all 7197

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>