2

对于一个工程项目,我基本上需要欺骗我的手机退出 NFC 搜索模式并进入手机持续输出能量的模式。显然我已经在设置中激活了 NFC,但我可以欺骗它离开搜索模式并让它持续输出能量的唯一方法是如果我把它放在一个空白标签的顶部。

我正在考虑实现这个 NFC 光束功能:(public boolean invokeBeam活动活动)并将其植入BeamLargeFilesAndroid Studio 中提供的示例代码中,如下所示。

我是应用程序开发的新手(尽管我有相当多的编码经验),所以我只是不确定它是否可行,或者我是否正在寻找正确的地方。任何想法,想法和帮助表示赞赏!

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示例代码

4

1 回答 1

1

当范围内没有合适的 NFC 设备时,NFC 控制器将不断在所有技术中搜索标签或对等设备。它通过发送没有现场活动的短脉冲来实现这一点(以节省电力)。

如果您有较新的设备,NFC 控制器也很可能只会产生非常微弱的射频场以节省电力。该磁场强度不足以为 NFC 标签供电,但足以让芯片检测到是否存在 13.56Mhz 共振。

使用标准 Android,您无法更改此行为。API 中没有编程方式来启用您正在寻找的模式。

但是,如果您可以稍微扩展您的要求,您可能会得到接近您想要的东西。

选项1:

启用阅读器模式。enableReaderMode使用EXTRA_READER_PRESENCE_CHECK_DELAY额外的调用。将此设置为非常高的值。

现在,如果标签进入 RF 场,NFC 控制器将不再经常检查是否存在。您可以通过触摸标签激活您的射频场,然后将其移除。

RF 场将保持稳定,直到存在检查延迟到期。

选项 2:

如果可以选择生根设备,您可以将自己侵入低级 NFC 堆栈。到目前为止,我使用过的每个 NFC 控制器都有一个或多个用于天线校准的测试模式。仅输出一个射频场是非常常见的测试模式之一。

阅读 nfc-stack 的源代码可能会告诉您如何启用这种模式。这需要对源代码进行一些挖掘,并不适合胆小的人,但它是可行的。

于 2015-10-25T00:37:11.550 回答