androidnfcndefnfc-p2pandroid-beam

Getting createMime is undefined for type beamActivity error from Google's sample code


I'm trying to learn NFC and read through Google documentation. I copied their code to create an Activty to beam data from one Android device to another.

I cannot get it to run on line new NdefRecord[] { createMime(... I get a "undefined for type beamActivity" error message from Google's sample code.

The complete code is below

public class BeamActivity extends Activity
                          implements CreateNdefMessageCallback, 
                                     OnNdefPushCompleteCallback {

    NfcAdapter mNfcAdapter;

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // see if there is a NFC interface
        mNfcAdapter=NfcAdapter.getDefaultAdapter(this);
        if (mNfcAdapter==null)
            Toast.makeText(this,"no adapter",
                    Toast.LENGTH_SHORT).show();

        mNfcAdapter.setNdefPushMessageCallback(this,this);  
            mNfcAdapter.setOnNdefPushCompleteCallback(this,this);
    }

    public void onNdefPushComplete( NfcEvent arg0) {
        mHandler.obtainMessage(1).sendToTarget();
    }

    private final Handler mHandler = new Handler() {
        @Override
        public void  handleMessage(Message msg) {
            switch(msg.what) {
            case 1:
                Toast.makeText( getApplicationContext(),"Mesg Sent",
                        Toast.LENGTH_SHORT).show();
                 break;
            } // end switch
        } // end handle mesg
    }; // end new

    // creat call back code
    // gets called to star a beam, return messag to beam  
    @Override
    public NdefMessage createNdefMessage(NfcEvent event) {
        String text = ("Beam me up, Android!\n\n" +
                "Beam Time: " + System.currentTimeMillis());

        // error message hear
        NdefMessage msg = new NdefMessage(
                new NdefRecord[] { createMime(
                        "application/vnd.com.example.android.beam", text.getBytes())
         /**
          * The Android Application Record (AAR) is commented out. When a device
          * receives a push with an AAR in it, the application specified in the AAR
          * is guaranteed to run. The AAR overrides the tag dispatch system.
          * You can add it back in to guarantee that this
          * activity starts when receiving a beamed message. For now, this code
          * uses the tag dispatch system.
          */
          //,NdefRecord.createApplicationRecord("com.example.android.beam")
        });
        return msg;
    }


    @Override
    public void onNewIntent(Intent intent)
    {
        setIntent(intent);
    }

    @Override
    public void onResume()
    {
        super.onRestart();

        if (mNfcAdapter.ACTION_NDEF_DISCOVERED.equals(  getIntent().getAction()))
        {
            processIntent( getIntent() );
        }
    }

    void processIntent( Intent intet)
    {
        Parcelable[] rawMsgs= intet.getParcelableArrayExtra( mNfcAdapter.EXTRA_NDEF_MESSAGES );

        NdefMessage msg = (  NdefMessage) rawMsgs[0];
        String s= new String(  msg.getRecords()[0].getPayload());

        Toast.makeText( getApplicationContext(), s,
                Toast.LENGTH_SHORT).show();
    }

}

Solution

  • createMime(...) is a static method of NdefRecord:

    NdefMessage msg = new NdefMessage(
        new NdefRecord[] {
            NdefRecord.createMime(
                    "application/vnd.com.example.android.beam",
                    text.getBytes())
        });