如何在不打开应用程序的情况下运行android程序?

时间:2014-07-27 18:48:57

标签: android nfc

我的应用程序可以通过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运行它,如何阻止应用显示屏幕?

3 个答案:

答案 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的情况下存在。