zoukankan      html  css  js  c++  java
  • NFC技术:让Android自动运行程序

     1 //实现向NFC标签写入包,然后将NFC靠近手机背面摄像头位置,自动运行写入的程序
     2 public class RunAppActivity extends Activity {
     3     private Button button;
     4     private String mpackage;
     5     private NfcAdapter nfcAdapter;
     6     private PendingIntent mPendingIntent;
     7 
     8     @Override
     9     protected void onCreate(Bundle savedInstanceState) {
    10         // TODO Auto-generated method stub
    11         super.onCreate(savedInstanceState);
    12 
    13         setContentView(R.layout.fragment_main);
    14         button = (Button) findViewById(R.id.button1);
    15         nfcAdapter = NfcAdapter.getDefaultAdapter(this);
    16         mPendingIntent = PendingIntent.getActivity(this, 0, new Intent(this,
    17                 getClass()), 0);
    18 
    19     }
    20 
    21     @Override
    22     protected void onNewIntent(Intent intent) {
    23         // TODO Auto-generated method stub
    24         // 当清单文件中设置为"singleTop"时,oncreate()只调用一次,而onNewIntent()每次调用
    25         super.onNewIntent(intent);
    26         if (mpackage == null)
    27             return;
    28         // 第一步获得Tag
    29         Tag detectetTag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
    30         // 第二步写入标签
    31         writeNFCTag(detectetTag);
    32     }
    33 
    34     private void writeNFCTag(Tag tag) {
    35         // TODO Auto-generated method stub
    36         if (tag == null) {
    37             return;
    38         }
    39 
    40         NdefMessage ndefMessage = new NdefMessage(
    41                 new NdefRecord[] { NdefRecord.createApplicationRecord(mpackage) });
    42 
    43         int size = ndefMessage.toByteArray().length;
    44         try {
    45             Ndef ndef = Ndef.get(tag);
    46             if (ndef != null) {
    47                 ndef.connect();
    48                 // 是否支持可写
    49                 if (!ndef.isWritable()) {
    50                     return;
    51                 }
    52                 // 判断是否可以容纳要写入的数据
    53                 if (ndef.getMaxSize() < size) {
    54                     return;
    55                 }
    56                 ndef.writeNdefMessage(ndefMessage);
    57                 Toast.makeText(this, "NFC成功写入", 0).show();
    58             }
    59         } catch (Exception e) {
    60             // TODO: handle exception
    61         }
    62     }
    63 
    64     @Override
    65     protected void onResume() {
    66         // TODO Auto-generated method stub
    67         super.onResume();
    68         // 获得焦点, 设置这个窗口优先级高于所有可以处理NFC的窗口
    69         if (nfcAdapter != null) {
    70             nfcAdapter.enableForegroundDispatch(this, mPendingIntent, null,
    71                     null);
    72         }
    73     }
    74 
    75     @Override
    76     protected void onPause() {
    77         // TODO Auto-generated method stub
    78         super.onPause();
    79         // 程序退出,窗口恢复默认
    80         if (nfcAdapter != null) {
    81             nfcAdapter.disableForegroundDispatch(this);
    82         }
    83     }
    84 
    85     public void onclick(View view) {
    86         Intent intent = new Intent(this, InstallAppListActivity.class);
    87         startActivityForResult(intent, 0);
    88     }
    89 }
     1 //显示所有安装的包
     2 public class InstallAppListActivity extends ListActivity implements
     3         OnItemClickListener {
     4     private List<String> mpackages = new ArrayList<String>();
     5 
     6     @Override
     7     protected void onCreate(Bundle savedInstanceState) {
     8         // TODO Auto-generated method stub
     9         super.onCreate(savedInstanceState);
    10         PackageManager manager = getPackageManager();
    11         List<PackageInfo> packageInfos = manager
    12                 .getInstalledPackages(PackageManager.GET_ACTIVITIES);
    13 
    14         for (PackageInfo packageInfo : packageInfos) {
    15             mpackages.add(packageInfo.applicationInfo.loadLabel(manager) + "
    "
    16                     + packageInfo.packageName);
    17 
    18         }
    19         ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
    20                 android.R.layout.simple_list_item_1, android.R.id.text1,
    21                 mpackages);
    22         setListAdapter(adapter);
    23         getListView().setOnItemClickListener(this);
    24     }
    25 
    26     @Override
    27     public void onItemClick(AdapterView<?> parent, View view, int position,
    28             long id) {
    29         Intent intent = new Intent();
    30         intent.putExtra("Packagename", mpackages.get(position));
    31         setResult(1, intent);
    32         finish();
    33     }
    34 
    35 }

  • 相关阅读:
    RSA加密
    各种正则
    用Fragment制作的Tab页面产生的UI重叠问题
    Android源码下载
    Android Studio使用百度地图问题总结
    Android获取网络类型
    Android Studio类中实现Serializable自动生成serialVersionUID
    【Android开发】如何设计开发一款Android App
    UIViewController生命周期
    微信支付开发经验分享
  • 原文地址:https://www.cnblogs.com/my334420/p/6909482.html
Copyright © 2011-2022 走看看