2014-03-06 124 views
0

我正在處理兩個不同的Android應用程序。管理USB主機註冊註銷

應用1:從USB NFC閱讀器 應用2讀取數據:將數據寫入USB NFC讀寫器

我可以管理所有的讀,寫的東西,以及在USB NFC讀寫器\寫的註冊\開幕。 問題是當我在這兩個應用程序之間切換時。

我在兩個應用程序的onStart()方法中提出了權限請求和registerReceiver。

protected void onStart() { 
    mPermissionIntent = PendingIntent.getBroadcast(this, 0, new Intent(
      Config.ACTION_USB_PERMISSION), 0); 
    filter = new IntentFilter(); 
    filter.addAction(Config.ACTION_USB_PERMISSION); 
    registerReceiver(mReceiver, filter); 
    for (UsbDevice device : mManager.getDeviceList().values()) { 
     if (Config.mReader.isSupported(device)) { 
      mManager.requestPermission(device, mPermissionIntent); 

     } 
    } 
    super.onStart(); 
} 

而且(在unregisterReceiver中的onStop)兩種使用方法:點擊主頁按鈕或後退按鈕

  1. 關閉應用1:

    protected void onStop() { 
        if (mReceiver != null) { 
         try { 
          Config.mReader.close(); 
          unregisterReceiver(mReceiver); 
         } catch (Exception e) { 
          Utils.log("error"); 
         } 
        } 
        super.onStop(); 
    } 
    

    如果我執行此操作和

  2. 打開應用程序2

一切正常。

如果我使用show application stack按鈕 ,它看起來像Application1在Application2的onStart()方法之前無法執行onStop()方法,導致Application1或Application1都無法控制USB Reader。

我是否完全錯了?

+1

爲什麼你需要兩個應用程序? – ThomasRS

+0

@ThomasRS爲了解如何正確管理USB主機註冊\註銷 – Federico

回答

0

要UNSER我自己的問題,我沒有這樣說:

  1. 我把註冊過程中在onStart()方法
  2. 和註銷過程中的onPause()方法

我嘗試將註冊放在onPause()方法中,但是通過這種方式,當提示用戶確認權限時,提示窗口顯示2次(女巫是相應於Activity生命週期的正常行爲),並執行註冊兩次。

在我這樣做的過程中,註冊和權限過程被執行一次,而註銷(在onPause()方法中)在另一個應用程序的註冊之前被及時執行。

希望這可以幫助。