我的应用程序可以通过NFC打开,然后使用标签中的信息进行一些处理,处理时间约为5秒。
如果我的应用程序是通过NFC打开的,我不希望它在屏幕上显示。所以这就是onCreate。
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(com.ab.R.layout.test);
Intent intent=getIntent();
if (NfcAdapter.ACTION_NDEF_DISCOVERED.equals(getIntent().getAction())) {
Log.v("nfc", "Start processing");
SystemClock.sleep(5000); // simulate the processing
Log.v("nfc", "End processing");
this.finish();
System.exit(0);
}
}
但它不起作用,应用程序将在屏幕上显示约5秒钟。
即使我不处理任何事情
if (NfcAdapter.ACTION_NDEF_DISCOVERED.equals(getIntent().getAction())) {
this.finish();
System.exit(0);
}
我仍然可以在很短的时间内看到应用程序屏幕。
如果我使用NFC运行它,如何阻止应用显示屏幕?
答案 0 :(得分:3)
在manifest.xml中,您可以指定为您的活动设置以下主题:
android:theme="@android:style/Theme.Translucent.NoTitleBar"
这会使您的活动不可见(如果它是空的)。
答案 1 :(得分:2)
如果我找对你,你想在应用程序通过NFC启动后立即在后台启动一些操作。关键是,只要您实际启动应用程序并调用活动的onCreate方法,您的应用程序就会进入前台并显示。
假设您不一定需要启动活动,而是通过NFC在您的应用程序中启动某个流程,最好的解决方案是将应该运行的代码外包,而不将应用程序置于BackgroundService中。在您想要了解的NFC事件上设置BroadcastReceiver。一旦收到通知,该接收者就可以开始您的后台服务。
编辑: grexter89是对的,我很抱歉我的不可实现的提示。 NFC事件提供的意图只能在活动中处理!好吧,我相信这不是你想要的答案,但我想这个限制是基于一些安全/隐私问题。如果上述方法是可能的,则一旦用户可能意外地与NFC场接触,NFC事件可以在未经用户同意和确认的情况下启动过程。这是您希望用于您的应用程序的用例,但是,这些情况很容易被滥用。
关于这些要点,如果您确实希望自己的活动不可见,则应重新考虑。鉴于谷歌仅限活动的限制以及上述原因(=>意外激活,缺乏用户意识),我将实施一种具有可见活动的方法,该方法很快会向用户显示提示。
答案 2 :(得分:1)
将行 setContentView(com.airbutton.R.layout.test); 放在IF中以验证是否应该显示它。请记住,活动可以在没有UI的情况下存在。