Android Intent重新开放活动

时间:2016-09-01 07:09:19

标签: android android-studio android-intent intentfilter

我有一个问题,我在这个网站上没有找到解决方案,但如果这是一个重复的问题,我道歉。

我正在开发一个应用程序,作为在员工开始/完成工作时注册的终端,以及众多其他事项。它的工作方式是,在NFC开启的情况下,他们扫描他们的NFC卡,我的应用程序读取它们并最终将适当的信息发送到服务器。

但是,如果应用程序已经打开(它应该一直打开,所以这是一个问题)并扫描NFC卡,它会重新打开应用程序。当然,这样做是因为我已经在清单中设置了它。但如果我不在清单中添加所有这些行,我找不到让我的应用程序接收NFC扫描意图的方法:

<intent-filter>
            <action android:name="android.nfc.action.TAG_DISCOVERED" />

            <category android:name="android.intent.category.DEFAULT" />
</intent-filter>

我试过没有写过但是在这种情况下它没有读卡,而是程序选择器出现在手机上,或者如果手机没有合适的应用程序,它只是说"NFC read error"

有人有解决方案吗?这是我项目的最后一步,我遇到了很多麻烦,并感谢任何帮助。这可能是我看不到的简单事情,但无论如何我都会感激。

2 个答案:

答案 0 :(得分:1)

Android活动有不同的启动模式。如果您设置单个实例,它将使用已打开的活动,并且不会创建新活动。您可以在覆盖方法onNewIntent()

中读取新意图
protected void onNewIntent(Intent intent) {
  super.onNewIntent(intent);
  // read intent values here
}

For various activity elements

答案 1 :(得分:0)

你可以使用broadcastReceiver, - 首先启动接收器进行活动

IntentFilter intentFilter = new IntentFilter();
    intentFilter.addAction("whateveryouwant");

    notificationBroadcastReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
// here you can read the intent and customize the action;
            int usage = intent.getIntExtra("usage",1000); 


            }


        }
    };
  • 第二次注册广播

    registerReceiver(notificationBroadcastReceiver,IntentFilter的);

  • 最后取消注册onDestroy方法

    中的广播

    @覆盖 protected void onDestroy(){

    if(notificationBroadcastReceiver != null){
    
        unregisterReceiver(notificationBroadcastReceiver);
        notificationBroadcastReceiver = null;
    }
    super.onDestroy();
    

    }

执行此操作后,您可以发送广播()

一个小指南:https://developer.android.com/reference/android/content/BroadcastReceiver.html

希望它会有所帮助