NFC之讓Android自動運行程式

來源:互聯網
上載者:User

標籤:android   nfc   

    最近在學習NFC,參考了兩篇不錯的文章

參考地址:

NFC基礎 http://blog.csdn.net/zoeice/article/details/9714867

NFC進階 http://blog.csdn.net/zoeice/article/details/9714963

本文是使用了NFC的標籤紙和小米3手機測試

首先建立一個Activity類

package com.cayden.run.application;import android.app.Activity;import android.app.PendingIntent;import android.content.Intent;import android.nfc.NdefMessage;import android.nfc.NdefRecord;import android.nfc.NfcAdapter;import android.nfc.Tag;import android.nfc.tech.Ndef;import android.os.Bundle;import android.view.View;import android.widget.Button;import android.widget.Toast;/** *  *   * @author cuiran * @version 1.0.0 */public class RunApplicationActivity extends Activity {private Button mSelectAutoRunApplication;private String mPackageName;private NfcAdapter mNfcAdapter;private PendingIntent mPendingIntent;@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);setContentView(R.layout.activity_auto_run_application);mSelectAutoRunApplication = (Button) findViewById(R.id.button_select_auto_run_application);mNfcAdapter = NfcAdapter.getDefaultAdapter(this);mPendingIntent = PendingIntent.getActivity(this, 0, new Intent(this,getClass()), 0);}public void onNewIntent(Intent intent) {if (mPackageName == null)return;Tag detectedTag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);writeNFCTag(detectedTag);}public void onResume() {super.onResume();if (mNfcAdapter != null)mNfcAdapter.enableForegroundDispatch(this, mPendingIntent, null,null);}public void onPause() {super.onPause();if (mNfcAdapter != null)mNfcAdapter.disableForegroundDispatch(this);}    public void onClick_SelectAutoRunApplication(View view)    {    Intent intent = new Intent(this, InstalledApplicationListActivity.class);    startActivityForResult(intent, 0);    }public void writeNFCTag(Tag tag) {if (tag == null) {return;}NdefMessage ndefMessage = new NdefMessage(new NdefRecord[] { NdefRecord.createApplicationRecord(mPackageName) });int size = ndefMessage.toByteArray().length;try {Ndef ndef = Ndef.get(tag);if(ndef!=null){ndef.connect();if(!ndef.isWritable()){return;}if(ndef.getMaxSize() < size){return;}ndef.writeNdefMessage(ndefMessage);Toast.makeText(this, "ok", Toast.LENGTH_LONG).show();}} catch (Exception e) {// TODO: handle exception}}@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data){if (resultCode == 1){mSelectAutoRunApplication.setText(data.getExtras().getString("package_name"));String temp = mSelectAutoRunApplication.getText().toString();mPackageName = temp.substring(temp.indexOf("\n") + 1);}}}

在此Activity中,可以點擊按鈕然後跳轉到另一個Activity,是用來顯示應用列表

package com.cayden.run.application;import java.util.ArrayList;import java.util.List;import android.app.ListActivity;import android.content.Intent;import android.content.pm.PackageInfo;import android.content.pm.PackageManager;import android.os.Bundle;import android.view.View;import android.widget.AdapterView;import android.widget.AdapterView.OnItemClickListener;import android.widget.ArrayAdapter;public class InstalledApplicationListActivity extends ListActivity implementsOnItemClickListener {private List<String> mPackages = new ArrayList<String>();@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);PackageManager packageManager = getPackageManager();List<PackageInfo> packageInfos = packageManager.getInstalledPackages(PackageManager.GET_ACTIVITIES);for (PackageInfo packageInfo : packageInfos) {mPackages.add(packageInfo.applicationInfo.loadLabel(packageManager)+ "\n" + packageInfo.packageName);}ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, android.R.id.text1,mPackages);setListAdapter(arrayAdapter);getListView().setOnItemClickListener(this);}@Overridepublic void onItemClick(AdapterView<?> parent, View view, int position,long id) {Intent intent = new Intent();intent.putExtra("package_name", mPackages.get(position));setResult(1, intent);finish();}}

當選擇應用後,會回調並傳回

packageInfo.applicationInfo.loadLabel(packageManager)+ "\n" + packageInfo.packageName
具體操作,先將nfc標籤紙放入手機背面會執行

public void onNewIntent(Intent intent) {if (mPackageName == null)return;Tag detectedTag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);writeNFCTag(detectedTag);}
如果不為空白,就將所選擇的應用寫入標籤紙

然後退出應用後,將標籤紙放入手機背面就會自動執行所選擇的應用程式。

關於NdefRecord 在官網也給出了api

http://developer.android.com/reference/android/nfc/package-summary.html

NFC之讓Android自動運行程式

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.