簡體   English   中英

如何在附近沒有可讀/可寫設備的情況下激活 NFC?

[英]How do I activate NFC without a readable/writable device nearby?

對於一個工程項目,我基本上需要欺騙我的手機,使其退出 NFC 搜索模式並進入手機持續釋放能量的模式。 顯然我已經在設置中激活了 NFC,但是我可以欺騙它離開搜索模式並讓它持續釋放能量的唯一方法是我把它放在一個空白標簽的頂部。

我正在考慮實現這個 NFC 光束功能: public boolean invokeBeam (活動活動)並將其植入 Android 工作室提供的BeamLargeFiles示例代碼,發布在下面。

我是應用程序開發的新手(盡管我有相當多的編碼經驗),所以我不確定它是否可行,或者我是否在正確的地方尋找。 任何想法,想法和幫助表示贊賞!

package com.example.android.beamlargefiles;

import android.graphics.Color;
import android.os.Bundle;
import android.support.v4.app.FragmentTransaction;
import android.text.Html;
import android.widget.TextView;
import android.view.Menu;

import com.example.android.common.activities.SampleActivityBase;
import com.example.android.common.logger.Log;
import com.example.android.common.logger.LogFragment;
import com.example.android.common.logger.LogWrapper;
import com.example.android.common.logger.MessageOnlyLogFilter;

/**
 * A simple launcher activity containing a summary sample description
 * and a few action bar buttons.
 */
public class MainActivity extends SampleActivityBase {

    public static final String TAG = "MainActivity";

    public static final String FRAGTAG = "BeamLargeFilesFragment";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        TextView sampleOutput = (TextView) findViewById(R.id.sample_output);
        sampleOutput.setText(Html.fromHtml(getString(R.string.intro_message)));

        FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
        BeamLargeFilesFragment fragment = new BeamLargeFilesFragment();
        transaction.add(fragment, FRAGTAG);
        transaction.commit();
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    /** Create a chain of targets that will receive log data */
    @Override
    public void initializeLogging() {
        // Wraps Android's native log framework.
        LogWrapper logWrapper = new LogWrapper();
        // Using Log, front-end to the logging chain, emulates android.util.log method signatures.
        Log.setLogNode(logWrapper);

        // Filter strips out everything except the message text.
        MessageOnlyLogFilter msgFilter = new MessageOnlyLogFilter();
        logWrapper.setNext(msgFilter);

        // On screen logging via a fragment with a TextView.
        LogFragment logFragment = (LogFragment) getSupportFragmentManager()
                .findFragmentById(R.id.log_fragment);
        msgFilter.setNext(logFragment.getLogView());
        logFragment.getLogView().setTextAppearance(this, R.style.Log);
        logFragment.getLogView().setBackgroundColor(Color.WHITE);

        Log.i(TAG, "Ready");
    }
}

來自android studio提供的beamlargedata示例代碼

當范圍內沒有合適的 NFC 設備時,NFC 控制器將不斷搜索標簽或對等設備的所有技術。 它通過發送沒有場活動分開的短脈沖來實現這一點(以節省電力)。

如果您有較新的設備,NFC 控制器也很可能只會產生非常弱的射頻場以節省電量。 該場不足以為 NFC 標簽供電,但足以讓芯片檢測是否有某些東西以 13.56Mhz 共振。

使用標准 Android,您無法更改此行為。 API 中沒有編程方式來啟用您正在尋找的模式。

但是,如果您可以稍微擴展您的要求,您可能會得到接近您想要的東西。

選項1:

啟用閱讀器模式。 使用EXTRA_READER_PRESENCE_CHECK_DELAY額外調用enableReaderMode 將此設置為非常高的值。

現在,如果標簽進入 RF 場,NFC 控制器將不再經常檢查是否存在。 您可以通過觸摸標簽然后將其移除來激活您的射頻場。

RF 場將保持穩定,直到存在檢查延遲到期。

選項 2:

如果可以選擇讓設備生根,您可以自己進入低級 NFC 堆棧。 到目前為止,我使用過的每個 NFC 控制器都有一種或多種天線校准測試模式。 僅輸出 RF 場是非常常見的測試模式之一。

閱讀 nfc-stack 的源代碼可能會向您展示如何啟用這種模式。 這需要對源代碼進行一些挖掘,不適合膽小的人,但它是可行的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM