package org.androidtown.lbs.map;
import android.annotation.TargetApi;
import android.app.Activity;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.nfc.NfcAdapter;
import android.nfc.NfcAdapter.CreateBeamUrisCallback;
import android.nfc.NfcAdapter.OnNdefPushCompleteCallback;
import android.nfc.NfcEvent;
import android.os.Build;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
@TargetApi(Build.VERSION_CODES.JELLY_BEAN)
public class NFCActivity extends Activity implements
CreateBeamUrisCallback, OnNdefPushCompleteCallback {
DBHandler dbHandler;
SQLiteDatabase db;
Cursor cursor = null;
private static final String TAG = "NFCActivity";
private static final int PICK_IMAGE = 100;
private NfcAdapter mNfcAdapter;
private Uri mSelImgUri;
private TextView mUriName;
private ImageView mPreviewImage;
@TargetApi(Build.VERSION_CODES.JELLY_BEAN)
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.nfc);
mUriName = (TextView) findViewById(R.id.imagePathText);
mPreviewImage = (ImageView) findViewById(R.id.selImageView);
// Check for available NFC Adapter. NFC를 사용할수 있는 기기인지 확인
mNfcAdapter = NfcAdapter.getDefaultAdapter(this);
if (mNfcAdapter == null) {
mUriName.setText("NFC를 사용할 수 없는 기기입니다.");
} else {
// Register callback to set NDEF message
mNfcAdapter.setBeamPushUrisCallback(this, this);
// Register callback to listen for message-sent success
mNfcAdapter.setOnNdefPushCompleteCallback(this, this);
}
showImg_nfc();
}
//onClick. 클릭했을때 갤러리에서 사진을 가져옴
public void selectImage(View v) {
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("image/*"); //image/ 폴더에서 데이터를 가져옴
startActivityForResult(intent, PICK_IMAGE);
}
//위 selectImage에서 가져온 이미지의 결과
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == PICK_IMAGE && resultCode == RESULT_OK
&& data != null) {
mUriName.setText(data.getData().toString()); // 이미지의 Uri를 mUriName에 setText
mSelImgUri = data.getData(); // 이미지의 Uri를 가져옴
mPreviewImage.setImageURI(data.getData()); // 이미지를 mPreviewImage에 보여줌
}
}
// onResume() 함수는 focus를 다시 얻었을때 불린다.
@Override
public void onResume() {
super.onResume();
// Check to see that the Activity started due to an Android Beam
if (Intent.ACTION_VIEW.equals(getIntent().getAction())) {
processIntent(getIntent());
}
}
@Override
public void onNewIntent(Intent intent) {
// onResume gets called after this to handle the intent
Toast.makeText(this, "111 : " + intent.getAction(), Toast.LENGTH_LONG).show();
setIntent(intent);
}
void processIntent(Intent intent) {
Uri data = intent.getData();
if (data != null) {
mPreviewImage.setImageURI(data);
} else {
mUriName.setText("Received Invalid Image Uri");
}
}
@Override
public Uri[] createBeamUris(NfcEvent event) {
if (mSelImgUri == null) {
return null;
}
return new Uri[] { mSelImgUri };
}
@Override
public void onNdefPushComplete(NfcEvent event) {
Log.i(TAG, "Push Complete!");
}
private void showImg_nfc() {
dbHandler = new DBHandler(this);
try{
// String sql1 = "select ncimg from members where "+ code;
// Cursor cursor = db.rawQuery("select code from members", null);
cursor = dbHandler.selectNC();
cursor.moveToLast();
byte[] image = cursor.getBlob(cursor.getColumnIndex("ncimg"));
// Bitmap bm = BitmapFactory.decodeByteArray(image, 0, image.length);
ImageView blobImg_nfc = (ImageView) findViewById(R.id.selImageView);
blobImg_nfc.setImageBitmap(BitmapFactory.decodeByteArray(image, 0, image.length));
cursor.close();
}catch (Exception e){
e.printStackTrace();
}
}
}
제가 참고하던 예제는 갤러리에서 이미지를 가져와 NFC로 전송하는 예제인데요.
이걸 응용해 DB에 BLOB타입의 이미지를 전송하고 싶은데
byte로 변환 한뒤에 전송 해주어야 하나요?
그리고 제가 초보라서 어느 부분이 전송하는 부분인지 확실하게 모르겠습니다....ㅠ
아 그리고 위 예제에서 다른폰에서 같은 앱을 실행시켜 NFC로 전송 하고자 할때 읽어 주는 부분이 있나요?
아니면 읽어주는 부분이 없어도 자동으로 받아와 주는건가요?
초보라서 질문이 많네요 죄송합니다. 도와주세요ㅠㅠ
ps. 아 맨밑에 showimg_nfc는 제가 DB에서 이미지를 불러오면서 적은 부분입니다. (이미지는 제대로 불러와져요.)