8、NFC技术:让Android自动打开网页

创建封装Uri的NdefRecord
 public  NdefRecord  createUri(String  uriString); 

 public  NdefRecord  createUri(Uri  uri);   

范例:自动打开网页
 1 import android.app.Activity;

 2 import android.app.PendingIntent;

 3 import android.content.Intent;

 4 import android.net.Uri;

 5 import android.nfc.NdefMessage;

 6 import android.nfc.NdefRecord;

 7 import android.nfc.NfcAdapter;

 8 import android.nfc.Tag;

 9 import android.nfc.tech.Ndef;

10 import android.nfc.tech.NdefFormatable;

11 import android.os.Bundle;

12 import android.widget.Toast;

13 

14 public class AutoOpenUriActivity extends Activity {

15     private NfcAdapter nfcAdapter;

16     private PendingIntent pendingIntent;

17 

18     @Override

19     public void onCreate(Bundle savedInstanceState) {

20         super.onCreate(savedInstanceState);

21 

22         setContentView(R.layout.activity_auto_open_uri);

23         nfcAdapter = NfcAdapter.getDefaultAdapter(this);

24         pendingIntent = PendingIntent.getActivity(this, 0, new Intent(this,

25                 getClass()), 0);

26 

27     }

28 

29     @Override

30     public void onResume() {

31         super.onResume();

32         if (nfcAdapter != null)

33             nfcAdapter

34                     .enableForegroundDispatch(this, pendingIntent, null, null);

35     }

36 

37     @Override

38     public void onNewIntent(Intent intent) {

39         Tag detectedTag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);

40         writeNFCTag(detectedTag);

41     }

42 

43     @Override

44     public void onPause() {

45         super.onPause();

46         if (nfcAdapter != null)

47             nfcAdapter.disableForegroundDispatch(this);

48 

49     }

50 

51     public void writeNFCTag(Tag tag) {

52         if (tag == null) {

53             return;

54         }

55         NdefMessage ndefMessage = new NdefMessage(

56                 new NdefRecord[] { NdefRecord.createUri(Uri

57                         .parse("http://www.baidu.com")) });

58         int size = ndefMessage.toByteArray().length;

59         try {

60             Ndef ndef = Ndef.get(tag);

61 

62             if (ndef != null) { // 证明标签是否是NDEF格式

63                 ndef.connect();

64                 if (!ndef.isWritable()) {

65                     return;

66                 }

67                 if (ndef.getMaxSize() < size) {

68                     return;

69                 }

70                 ndef.writeNdefMessage(ndefMessage);

71                 Toast.makeText(this, "ok", Toast.LENGTH_LONG).show();

72             } else {

73                 // 格式化成NDEF格式。

74                 NdefFormatable format = NdefFormatable.get(tag);

75                 if (format != null) {

76                     format.connect();

77                     format.format(ndefMessage);

78                     Toast.makeText(this, "ok", Toast.LENGTH_LONG).show();

79 

80                 } else {

81                     Toast.makeText(this, "formating is failed",

82                             Toast.LENGTH_LONG).show();

83                 }

84 

85             }

86 

87         } catch (Exception e) {

88             // TODO: handle exception

89         }

90 

91     }

92 

93 }

 

 1 <?xml version="1.0" encoding="utf-8"?>

 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

 3     android:layout_width="match_parent"

 4     android:layout_height="match_parent"

 5     android:orientation="vertical" >

 6 

 7     <TextView

 8         android:layout_width="match_parent"

 9         android:layout_height="wrap_content"

10         android:layout_marginBottom="5dp"

11         android:text="请将NFC标签或贴纸靠近手机背面"

12         android:textSize="16sp" />

13 

14     <ImageView

15         android:layout_width="match_parent"

16         android:layout_height="match_parent"

17         android:layout_margin="10dp"

18         android:src="@drawable/read_nfc_tag" />

19 

20 </LinearLayout>

 

 1 <manifest xmlns:android="http://schemas.android.com/apk/res/android"

 2     package="cn.eoe.open.uri"

 3     android:versionCode="1"

 4     android:versionName="1.0" >

 5 

 6     <uses-sdk

 7         android:minSdkVersion="15"

 8         android:targetSdkVersion="15" />

 9 

10     <uses-permission android:name="android.permission.NFC" />

11 

12     <application

13         android:icon="@drawable/ic_launcher"

14         android:label="@string/app_name"

15         android:theme="@style/AppTheme" >

16         <activity

17             android:name="AutoOpenUriActivity"

18             android:label="@string/title_activity_auto_run_application"

19             android:launchMode="singleTop"

20             android:screenOrientation="portrait" >

21             <intent-filter>

22                 <action android:name="android.intent.action.MAIN" />

23 

24                 <category android:name="android.intent.category.LAUNCHER" />

25             </intent-filter>

26         </activity>

27 

28     </application>

29 

30 </manifest>

 

你可能感兴趣的:(android)