NFC打开指定应用 URI实现

这段代码展示了如何使用NFC技术创建一个NdefRecord,然后写入到NFC标签中,以在读取标签时启动指定的URI('zoeice://com.zoeice.example/applicationUp')。代码首先检查标签是否可写,然后尝试写入NDEF消息。如果标签已格式化,直接写入;否则,先格式化再写入。在写入过程中,处理了各种可能的异常,如TagLostException、IOException和FormatException。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

import java.io.IOException;
import java.nio.charset.Charset;

import android.content.Context;
import android.nfc.FormatException;
import android.nfc.NdefMessage;
import android.nfc.NdefRecord;
import android.nfc.Tag;
import android.nfc.TagLostException;
import android.nfc.tech.Ndef;
import android.nfc.tech.NdefFormatable;
import android.widget.Toast;

public class NFC {
public static boolean writeTag(Context context, Tag tag) {    
   NdefRecord relayRecord = new NdefRecord(
       NdefRecord.TNF_ABSOLUTE_URI ,
       "zoeice://com.zoeice.example/applicationUp".getBytes(Charset.forName("US-ASCII")),
       new byte[0], new byte[0]);
 
   // Complete NDEF message with both records
   NdefMessage message = new NdefMessage(new NdefRecord[] {relayRecord});
 
   try {
       // If the tag is already formatted, just write the message to it
       Ndef ndef = Ndef.get(tag);
       if(ndef != null) {
           ndef.connect();
 
           // Make sure the tag is writable
           if(!ndef.isWritable()) {
            Toast.makeText(context, "nfcReadOnlyErrorTitle", Toast.LENGTH_SHORT ).show();
               return false;
           }
 
           // Check if there's enough space on the tag for the message
           int size = message.toByteArray().length;
           if(ndef.getMaxSize() < size) {
            Toast.makeText(context, "nfcReadOnlyErrorTitle", Toast.LENGTH_SHORT ).show();
               return false;
           }
 
           try {
               // Write the data to the tag
               ndef.writeNdefMessage(message);
 
               Toast.makeText(context, "nfcWrittenTitle", Toast.LENGTH_SHORT ).show();
               return true;
           } catch (TagLostException tle) {
            Toast.makeText(context, "nfcTagLostErrorTitle", Toast.LENGTH_SHORT ).show();
               return false;
           } catch (IOException ioe) {
            Toast.makeText(context, "nfcFormattingErrorTitle", Toast.LENGTH_SHORT ).show();
               return false;
           } catch (FormatException fe) {
            Toast.makeText(context, "nfcFormattingErrorTitle", Toast.LENGTH_SHORT ).show();
               return false;
           }
       // If the tag is not formatted, format it with the message
       } else {
           NdefFormatable format = NdefFormatable.get(tag);
           if(format != null) {
               try {
                   format.connect();
                   format.format(message);
 
                   Toast.makeText(context, "nfcWrittenTitle", Toast.LENGTH_SHORT ).show();
                   return true;
               } catch (TagLostException tle) {
                Toast.makeText(context, "nfcTagLostErrorTitle", Toast.LENGTH_SHORT ).show();
                   return false;
               } catch (IOException ioe) {
                Toast.makeText(context, "nfcFormattingErrorTitle", Toast.LENGTH_SHORT ).show();
                   return false;
               } catch (FormatException fe) {
                Toast.makeText(context, "nfcFormattingErrorTitle", Toast.LENGTH_SHORT ).show();
                   return false;
               }
           } else {
            Toast.makeText(context, "nfcNoNdefErrorTitle", Toast.LENGTH_SHORT ).show();
               return false;
           }
       }
   } catch(Exception e) {
    Toast.makeText(context, "nfcUnknownErrorTitle", Toast.LENGTH_SHORT ).show();
   }
 
   return false;
}
}
 
 
识别Tag的方法是在AndroidManifest.xml中加入:

 

          
                 
                    
             
             
                    
                    
                    
             
    
<think>好的,用户想知道如何通过NFC触发手机APP自动启动。首先,我需要回忆一下NFC的基本原理和应用场景。NFC(近场通信)允许设备在靠近时进行数据交换,通常用于支付、门禁等场景。用户的问题是利用NFC标签,当手机靠近时自动打开特定APP。 根据引用中的信息,首先需要确保手机支持NFC功能,并且APP有相应的权限配置。比如,在AndroidManifest.xml中添加NFC权限和硬件要求,如引用[3]提到的。然后,可能需要将APP的包名写入NFC标签,或者在标签中存储特定的动作,如启动APP的Intent。 接下来,步骤可能包括:1. 准备NFC标签,确保可写入;2. 使用NFC Tools等应用擦除标签并写入数据,如引用[2]中的擦除步骤;3. 在APP中配置Intent过滤器,以便识别NFC标签的内容并自动响应。 还要考虑不同操作系统的差异,比如Android和iOS的处理方式可能不同,但用户提到的是Android,所以重点在Android的实现。另外,需要确保NFC标签的格式正确,比如使用NDEF格式,并且APP能够正确解析触发动作。 可能遇到的问题包括权限不足、标签格式不支持,或者Intent配置错误。需要检查这些方面,并参考引用中的代码配置,确保AndroidManifest中的设置正确,如minSdkVersion和uses-feature等。 最后,生成相关问题时要覆盖实现步骤、权限配置、不同系统支持、所需工具以及常见错误处理,帮助用户全面理解整个过程。</think>### 如何通过 NFC 触发手机 APP 自动启动? #### 实现步骤 1. **硬件与权限准备** - 确保手机支持 NFC 功能,并在应用的 `AndroidManifest.xml` 中添加以下权限和配置[^3]: ```xml <uses-permission android:name="android.permission.NFC" /> <uses-feature android:name="android.hardware.nfc" android:required="true" /> ``` - 设置最低 SDK 版本为 14 或更高(Android 4.0+)。 2. **写入 NFC 标签** - 使用工具(如 *NFC Tools*)擦除标签并写入数据。例如,在 NFC 标签中写入 **应用包名** 或指定一个 **Intent 动作**(如 `ACTION_VIEW`)[^2]。 - 对于自动启动应用,可将标签内容设置为 `android.intent.action.MAIN` 并关联应用包名。 3. **应用配置 Intent 过滤器** - 在 `AndroidManifest.xml` 的 Activity 中声明 NFC 相关的 Intent 过滤器: ```xml <intent-filter> <action android:name="android.nfc.action.NDEF_DISCOVERED" /> <category android:name="android.intent.category.DEFAULT" /> <!-- 指定数据类型或 URI,例如匹配特定文本 --> <data android:mimeType="text/plain" /> </intent-filter> ``` 4. **处理 NFC 事件** - 在 Activity 中重写 `onNewIntent()` 方法,解析 NFC 标签数据并执行相应操作(如跳转页面)。 #### 注意事项 - **标签格式**:需使用 NDEF(NFC Data Exchange Format)格式,确保手机能识别。 - **系统兼容性**:iOS 对 NFC 标签的读写限制较多,此方法主要适用于 Android。 - **用户交互**:部分手机需解锁屏幕或启用 NFC 功能才能触发。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值