Android Beam sample for ICS SDK
Change-Id: Ie36e39fef96beb39b06f9d3fcfc41b48a890fa0f
This commit is contained in:
40
samples/AndroidBeam/AndroidManifest.xml
Normal file
40
samples/AndroidBeam/AndroidManifest.xml
Normal file
@@ -0,0 +1,40 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
/*
|
||||
**
|
||||
** Copyright 2011, The Android Open Source Project
|
||||
**
|
||||
** Licensed under the Apache License, Version 2.0 (the "License");
|
||||
** you may not use this file except in compliance with the License.
|
||||
** You may obtain a copy of the License at
|
||||
**
|
||||
** http://www.apache.org/licenses/LICENSE-2.0
|
||||
**
|
||||
** Unless required by applicable law or agreed to in writing, software
|
||||
** distributed under the License is distributed on an "AS IS" BASIS,
|
||||
** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
** See the License for the specific language governing permissions and
|
||||
** limitations under the License.
|
||||
*/
|
||||
-->
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
package="com.example.android.beam"
|
||||
android:versionCode="1"
|
||||
android:versionName="1.0">
|
||||
<uses-permission android:name="android.permission.NFC" />
|
||||
<application android:icon="@drawable/icon" android:label="@string/app_name">
|
||||
<activity android:name="com.example.android.beam.Beam"
|
||||
android:label="@string/app_name"
|
||||
android:launchMode="singleTop">
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN" />
|
||||
<category android:name="android.intent.category.LAUNCHER" />
|
||||
</intent-filter>
|
||||
<intent-filter>
|
||||
<action android:name="android.nfc.action.NDEF_DISCOVERED" />
|
||||
<category android:name="android.intent.category.DEFAULT" />
|
||||
<data android:mimeType="application/com.example.android.beam" />
|
||||
</intent-filter>
|
||||
</activity>
|
||||
</application>
|
||||
</manifest>
|
||||
3
samples/AndroidBeam/_index.html
Executable file
3
samples/AndroidBeam/_index.html
Executable file
@@ -0,0 +1,3 @@
|
||||
<p>The Beam application demonstrates how to use the Android Beam feature introduced in API level 14. This
|
||||
application beams a simple message from one device to another when they are in close enough proximity. This
|
||||
application must be installed on two devices that have NFC capabilities, running Android 4.0 or later.</p>
|
||||
BIN
samples/AndroidBeam/res/drawable-hdpi/icon.png
Normal file
BIN
samples/AndroidBeam/res/drawable-hdpi/icon.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 4.0 KiB |
BIN
samples/AndroidBeam/res/drawable-ldpi/icon.png
Normal file
BIN
samples/AndroidBeam/res/drawable-ldpi/icon.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.7 KiB |
BIN
samples/AndroidBeam/res/drawable-mdpi/icon.png
Normal file
BIN
samples/AndroidBeam/res/drawable-mdpi/icon.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 2.5 KiB |
24
samples/AndroidBeam/res/layout/main.xml
Normal file
24
samples/AndroidBeam/res/layout/main.xml
Normal file
@@ -0,0 +1,24 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
/*
|
||||
**
|
||||
** Copyright 2011, The Android Open Source Project
|
||||
**
|
||||
** Licensed under the Apache License, Version 2.0 (the "License");
|
||||
** you may not use this file except in compliance with the License.
|
||||
** You may obtain a copy of the License at
|
||||
**
|
||||
** http://www.apache.org/licenses/LICENSE-2.0
|
||||
**
|
||||
** Unless required by applicable law or agreed to in writing, software
|
||||
** distributed under the License is distributed on an "AS IS" BASIS,
|
||||
** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
** See the License for the specific language governing permissions and
|
||||
** limitations under the License.
|
||||
*/
|
||||
-->
|
||||
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:id="@+id/textView"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="wrap_content"
|
||||
/>
|
||||
4
samples/AndroidBeam/res/values/strings.xml
Normal file
4
samples/AndroidBeam/res/values/strings.xml
Normal file
@@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="app_name">Beam</string>
|
||||
</resources>
|
||||
112
samples/AndroidBeam/src/com/example/android/beam/Beam.java
Normal file
112
samples/AndroidBeam/src/com/example/android/beam/Beam.java
Normal file
@@ -0,0 +1,112 @@
|
||||
/*
|
||||
* Copyright (C) 2011 The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package com.example.android.beam;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.content.Intent;
|
||||
import android.nfc.NdefMessage;
|
||||
import android.nfc.NdefRecord;
|
||||
import android.nfc.NfcAdapter;
|
||||
import android.nfc.NfcAdapter.CreateNdefMessageCallback;
|
||||
import android.nfc.NfcEvent;
|
||||
import android.os.Bundle;
|
||||
import android.os.Parcelable;
|
||||
import android.widget.TextView;
|
||||
import android.widget.Toast;
|
||||
import java.nio.charset.Charset;
|
||||
|
||||
|
||||
public class Beam extends Activity implements CreateNdefMessageCallback {
|
||||
NfcAdapter mNfcAdapter;
|
||||
TextView textView;
|
||||
|
||||
@Override
|
||||
public void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
setContentView(R.layout.main);
|
||||
TextView textView = (TextView) findViewById(R.id.textView);
|
||||
// Check for available NFC Adapter
|
||||
mNfcAdapter = NfcAdapter.getDefaultAdapter(this);
|
||||
if (mNfcAdapter == null) {
|
||||
Toast.makeText(this, "NFC is not available", Toast.LENGTH_LONG).show();
|
||||
finish();
|
||||
return;
|
||||
}
|
||||
// Register callback
|
||||
mNfcAdapter.setNdefPushMessageCallback(this, this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public NdefMessage createNdefMessage(NfcEvent event) {
|
||||
String text = ("Beam me up, Android!\n\n" +
|
||||
"Beam Time: " + System.currentTimeMillis());
|
||||
NdefMessage msg = new NdefMessage(
|
||||
new NdefRecord[] { createMimeRecord(
|
||||
"application/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 onResume() {
|
||||
super.onResume();
|
||||
// Check to see that the Activity started due to an Android Beam
|
||||
if (NfcAdapter.ACTION_NDEF_DISCOVERED.equals(getIntent().getAction())) {
|
||||
processIntent(getIntent());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onNewIntent(Intent intent) {
|
||||
// onResume gets called after this to handle the intent
|
||||
setIntent(intent);
|
||||
}
|
||||
|
||||
/**
|
||||
* Parses the NDEF Message from the intent and prints to the TextView
|
||||
*/
|
||||
void processIntent(Intent intent) {
|
||||
textView = (TextView) findViewById(R.id.textView);
|
||||
Parcelable[] rawMsgs = intent.getParcelableArrayExtra(
|
||||
NfcAdapter.EXTRA_NDEF_MESSAGES);
|
||||
// only one message sent during the beam
|
||||
NdefMessage msg = (NdefMessage) rawMsgs[0];
|
||||
// record 0 contains the MIME type, record 1 is the AAR, if present
|
||||
textView.setText(new String(msg.getRecords()[0].getPayload()));
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a custom MIME type encapsulated in an NDEF record
|
||||
*
|
||||
* @param mimeType
|
||||
*/
|
||||
public 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;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user