/
WriteToCardAsyncTask.java
127 lines (112 loc) · 3.02 KB
/
WriteToCardAsyncTask.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
package com.esperia09.android.nfc_ehime.nfc;
import java.io.IOException;
import java.util.Arrays;
import android.content.Context;
import android.nfc.FormatException;
import android.nfc.NdefMessage;
import android.nfc.NdefRecord;
import android.nfc.Tag;
import android.nfc.TagLostException;
import android.nfc.tech.Ndef;
import android.nfc.tech.NdefFormatable;
import android.os.AsyncTask;
public class WriteToCardAsyncTask extends AsyncTask<NdefRecord, Void, String> {
private Context mContext;
private Tag mTag;
private OnResultListener mListener;
public WriteToCardAsyncTask(Context context, Tag tag) {
mContext = context;
mTag = tag;
}
@Override
protected String doInBackground(NdefRecord... params) {
try {
writeToCard(params);
} catch (Exception e) {
return e.getMessage();
}
return null;
}
public WriteToCardAsyncTask setListener(OnResultListener l) {
mListener = l;
return this;
}
@Override
protected void onPostExecute(String errMsg) {
super.onPostExecute(errMsg);
if (errMsg == null) {
// エラーメッセージがなかったら成功
if (mListener != null) {
mListener.onDone();
}
} else {
// エラーが出たら書き込み失敗
if (mListener != null) {
mListener.onFail(errMsg);
}
}
}
/**
*
* @param params
*/
private void writeToCard(NdefRecord[] params) throws RuntimeException,
TagLostException, FormatException, IOException {
if (mTag == null) {
throw new RuntimeException("タグが正しく読み取れませんでした。");
}
if (Arrays.asList(mTag.getTechList()).contains(
NdefFormatable.class.getName())) {
// TechListにNdefFormatable が含まれていたら
writeNdefFormatable(params);
} else if (Arrays.asList(mTag.getTechList()).contains(
Ndef.class.getName())) {
// TechListにNdef が含まれていたら
writeNdef(params);
} else {
throw new RuntimeException("対応していないタグです。");
}
}
private void writeNdef(NdefRecord[] params) throws TagLostException, FormatException, IOException {
Ndef ndef = Ndef.get(mTag);
try {
// 未接続だったら接続.
if (!ndef.isConnected()) {
ndef.connect();
}
// 書込可能かチェック
if (ndef.isWritable()) {
// 書込
ndef.writeNdefMessage(new NdefMessage(params));
} else {
throw new RuntimeException("書き込みができないタグでした!!");
}
} finally {
ndef.close();
}
}
private void writeNdefFormatable(NdefRecord[] params) throws TagLostException, FormatException, IOException {
NdefFormatable ndef = NdefFormatable.get(mTag);
try {
// 未接続だったら接続.
if (!ndef.isConnected()) {
ndef.connect();
}
// 書込
ndef.format(new NdefMessage(params));
} finally {
ndef.close();
}
}
public interface OnResultListener {
/**
* 書き込みに成功した時に呼ばれます。
*/
public void onDone();
/**
* 書き込みに失敗した時に呼ばれます。
* @param errMsg
*/
public void onFail(String errMsg);
}
}