2013-08-05 39 views
3

我正在使用的應用程序通過USB連接與設備成功連接。記住USB連接,但不要啓動應用程序

此外,它現在還記得從不同的發射設備,如以下線程storing usb default connections也指出。

然而,這留下的USB設備連接時總是啓動活動的不利影響。沒有啓動應用程序,我無法記住默認值。在連接上啓動應用程序不是一個理想的效果。下面的小代碼示例是清單目前的樣子,以便快速瀏覽未來連接時將默認USB連接存儲在內存中。可以在不導致應用程序啓動的情況下完成默認設置的存儲嗎?

<activity 
    android:name="com.MainScreen" 
    android:theme="@style/Theme.Default" 
    android:configChanges="orientation|keyboardHidden|screenSize" 
    android:label="@string/app_name"> 
    <intent-filter> 
     <action android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" /> 
    </intent-filter> 
    <meta-data android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" 
       android:resource="@xml/device_filter" /> 
</activity> 

我一直在想,也許有一個類型類別的,我可能會增加,將其指定爲一個非可啓動的意圖的意圖過濾器。活動期間收聽的內容,但由活動處理的內容。到目前爲止,我還沒有找到這個。

更新:

聲明爲服務或在清單中的接收器內的USB設備連接的意圖也已經在存儲連接信息的嘗試。但是,只有活動中的意圖纔會記住連接狀態,以便在稍後給定時間點重新連接時不需要詢問用戶。它看起來好像只是爲了保存狀態,並在連接時啓動應用程序。有點奇怪,但沒有解決方法來獲取不啓動與記住USB連接設備的默認連接。

回答

3

您不必始終開展活動。你可以讓後臺服務靜靜地處理這個意圖。

<service android:name=".MyService"> 
    <intent-filter> 
      <action android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" /> 
    </intent-filter> 
</service> 

更新:

您可能需要請求某種權限明確。下面是你應該做的:

  1. 當用戶安裝應用程序並第一次打開它時,要求提供USB相關權限。
  2. 設置一個服務來處理上面提到的USB連接事件。連接時,只要連接了可識別的設備,就會在狀態欄中顯示持久通知。
  3. 狀態欄通知對於通知用戶需要更多權限以及可以訪問主UI活動也很有用。
+0

該設備不會從服務中記住。因此,將濾波器放置在連接時可能不會啓動設備,但它在連接然後斷開連接時也不會記住該設備。這是記憶和不啓動的結合,我似乎無法得到結果。 –

+0

@JaySnayder'設備不會從服務內部被記住。 。 。爲什麼? –

+0

這一直是通過研究其他文章發現的。有幾篇文章提到爲服務創建小包裝活動,以便記住設備何時連接後續時間的默認答案。無論如何,我決定嘗試它,但它不會記住用戶在服務中的決定。 –

2

你應該做一個小的重新設計。

創建一個Service和運行邏輯,如「當連接的USB設備」等。該服務中(可能是您讓他們在活動現在)。

順便說一句,你總是可以很好地利用您的MainActivity從或遠離該服務。

+0

處理服務中的USB通信可能是正確的途徑,而不是在我的活動中處理它,併爲某些任務使用AsyncTasks。但是,我並不完全遵循在存儲默認值時使用服務。在服務中放置一個意圖似乎並不存儲用戶選擇的默認設置以記住設備。 –

1

我可以用我自己的實驗,該USB設備將無法從服務中記住確認。看來requestPermission()必須來自一個Activity。

爲了避免推出的活動,我實現onPostCreate()這樣的:

@Override // from Activity 
public void onPostCreate(Bundle savedInstanceState) { 
    super.onPostCreate(savedInstanceState); 

    Intent triggerIntent = getIntent(); 
    if (triggerIntent != null) { 
     if (! triggerIntent.hasCategory(Intent.CATEGORY_LAUNCHER)) { 
      Log.e(LOGTAG, "not started by launcher! exit now."); 
      finish(); 
     } 
    } 
} 

我用onPostCreate(),而不是代碼粘貼到的onCreate(),因爲在調用結束時() onCreate()會導致立即調用onDestroy(),並且通常並非Activity類的所有成員都已正確設置。我使用onPostCreate()方法似乎更安全。

相關問題