よろしくお願いいたします。
SuicaをAndroid端末にかざすと画面遷移するアプリを作成しています。
これだけなら簡単なのですが、
かざしていたSuicaを端末から離した時に元の画面に戻りたいのです。
なお、遷移先の画面はFragmentで、MainActivityの上に乗っけています。
Suicaを離した時はこの画面Bを削除することで元のMainActivityを再表示するイメージです。
現在のコードは
Java
1 public void onNewIntent(Intent intent) { 2 transaction(intent); //画面遷移メソッドを呼び出し 3 4 Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG); 5 Ndef ndef = Ndef.get(tag); 6 try { 7 ndef.connect(); 8 while(ndef.isConnected()){ 9 Toast.makeText(this, "タッチしています", Toast.LENGTH_LONG).show(); 10 } 11 Toast.makeText(this, "タグが離れました", Toast.LENGTH_LONG).show(); 12 } catch (IOException e) { 13 Toast.makeText(this, "エラー", Toast.LENGTH_LONG).show(); 14 } }
この様な感じです
タグが離れた時に元の画面に戻る部分は未実装です。
このコードだと端末からSuicaを離すまで画面遷移(transaction)が実行されません。
画面遷移をしつつ、Suicaと端末の状態をモニターするにはどのような機能を使い、どんなコードを書くべきでしょうか?
よろしくお願いします。
追記:別threadを作成
Java
1 public void onNewIntent(Intent intent) { 2 transaction(intent); //画面遷移メソッドを呼び出し 3 4 SuicaCheck check = new SuicaCheck(); 5 check.start(); 6 } 7 8class SuicaCheck extends Thread { 9 public void run(){ 10 Intent intent = new Intent(); 11 Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG); 12 Ndef ndef = Ndef.get(tag); 13 try { 14 ndef.connect(); 15 while(ndef.isConnected()){ 16 Toast.makeText(this, "タッチしています", Toast.LENGTH_LONG).show(); 17 } 18 Toast.makeText(this, "タグが離れました", Toast.LENGTH_LONG).show(); 19 } catch (IOException e) { 20 Toast.makeText(this, "エラー", Toast.LENGTH_LONG).show(); 21 } 22 }
実行結果
Suicaをかざした時点でアプリ終了
エラー内容
E/AndroidRuntime: FATAL EXCEPTION: Thread-11563
Process: com.example.user.test, PID: 7454
java.lang.NullPointerException: Attempt to invoke virtual method 'boolean android.nfc.Tag.hasTech(int)' on a null object reference
at android.nfc.tech.Ndef.get(Ndef.java:146)
at com.example.user.test.MainActivity$SuicaCheck.run(MainActivity.java:144)
MainACtivityの144行目は
Java
1Ndef ndef = Ndef.get(tag);
です。tagが他が正しく値を持ってこれていないのでしょうか、
onNewIntentにあった時との違いがいまいち分かりません・・・
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/02/23 10:45 編集
2017/02/23 11:50 編集
2017/02/24 01:57
2017/02/24 02:10
2017/02/24 02:45
2017/02/24 02:47
2017/02/27 02:59