▼Androidメモ▼
Androidビーム


Androidビームを利用するプログラムを作成する。



ソースコード
AndroidBeamEx.java
package net.npaka.androidbeamex;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.nfc.NdefMessage;
import android.nfc.NdefRecord;
import android.nfc.NfcAdapter;
import android.nfc.NfcAdapter.CreateNdefMessageCallback;
import android.nfc.NfcAdapter.OnNdefPushCompleteCallback;
import android.nfc.NfcEvent;
import android.os.Bundle;
import android.os.Handler;
import android.os.Parcelable;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;
import java.nio.charset.Charset;
import java.util.Date;

//Androidビーム
public class AndroidBeamEx extends Activity implements 
    CreateNdefMessageCallback,OnNdefPushCompleteCallback {
    private NfcAdapter nfcAdapter;
    private TextView   textView;

    //アクティビティ生成時に呼ばれる
    @Override
    public void onCreate(Bundle bundle) {
        super.onCreate(bundle);
        
        //レイアウトの生成
        LinearLayout layout=new LinearLayout(this);
        layout.setOrientation(LinearLayout.VERTICAL);
        setContentView(layout); 

        //テキストビューの生成
        textView=new TextView(this);
        textView.setTextSize(16.0f);      
        layout.addView(textView);
        
        //NFCアダプタの取得
        nfcAdapter=NfcAdapter.getDefaultAdapter(this);
        if (nfcAdapter!=null) {
            nfcAdapter.setNdefPushMessageCallback(this,this);
            nfcAdapter.setOnNdefPushCompleteCallback(this,this);
        } else {
            toast(this,"NFCを利用できない端末です");
        }
    }
    
    //インテント受信時に呼ばれる
    @Override
    public void onNewIntent(Intent intent) {
        setIntent(intent);
    }

    //アクティビティレジューム時に呼ばれる
    @Override
    public void onResume() {
        super.onResume();
        //Androidビームによる起動の時は受信処理
        Intent intent=getIntent();
        if (NfcAdapter.ACTION_NDEF_DISCOVERED.equals(intent.getAction())) {
            Parcelable[] msgs=intent.getParcelableArrayExtra(
                NfcAdapter.EXTRA_NDEF_MESSAGES);
            NdefMessage msg=(NdefMessage)msgs[0];
            textView.setText(new String(msg.getRecords()[0].getPayload()));            
        }
    }    

    //NDEFメッセージ生成時に呼ばれる
    @Override
    public NdefMessage createNdefMessage(NfcEvent event) {
        String text="受信>"+(new Date());
        NdefMessage msg=new NdefMessage(
            new NdefRecord[]{createMimeRecord(
                "application/net.npaka.androidbeamex",text.getBytes())
            //,NdefRecord.createApplicationRecord("net.npaka.androidbeamex")//AAR
        });
        return msg;
    }

    //MIMEレコードの生成
    private NdefRecord createMimeRecord(String mimeType,byte[] payload) {
        byte[] mimeBytes=mimeType.getBytes(Charset.forName("US-ASCII"));
        NdefRecord mimeRecord=new NdefRecord(NdefRecord.TNF_MIME_MEDIA,
            mimeBytes,new byte[0],payload);
        return mimeRecord;
    }
    
    //FDEFメッセージのプッシュ完了時に呼ばれる
    @Override
    public void onNdefPushComplete(NfcEvent event) {
        Handler handler=new Handler();
        handler.post(new Runnable(){public void run(){
            toast(AndroidBeamEx.this,"送信完了");
        }});
    }
    
    //トーストの表示
    public static void toast(Context context,String text) {
        Toast.makeText(context,text,Toast.LENGTH_LONG).show();
    }
}


−戻る−