2014-04-02 81 views
0

在我的應用程序中,我有兩個activities,它們顯示爲兩個不同的應用程序(主屏幕上的單獨圖標)。現在他們都有意圖過濾偵聽插入的USB設備。問題是,如果在Activity A中,並且我將USB設備插入到平板電腦,則會自動啓動Activity B。 我想實現的是:爲不同的活動處理相同的意圖過濾器

Activity A -> insert USB -> stay in Activity A and do something with the USB 
Activity B -> insert USB -> stay in Activity B and do something else with the USB 

這裏是我的清單

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="mypackage.myapp" 
    android:versionCode="100" 
    android:versionName="1.0.0-dev" > 

    <uses-sdk 
     android:minSdkVersion="15" 
     android:targetSdkVersion="19" /> 

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> 

    <application 
     android:allowBackup="true" 
     android:icon="@drawable/my_icon" 
     android:theme="@style/AppTheme" > 
     <activity 
      android:name="mypackage.ActivityA" 
      android:icon="@drawable/my_icon" 
      android:label="@string/ActivityA" 
      android:launchMode="singleTask" 
      android:screenOrientation="landscape" > 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
      <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/lib_device_filter" /> 

     </activity> 
     <activity 
      android:name="mypackage.ActivityB" 
      android:icon="@drawable/another_icon" 
      android:label="@string/ActivityB" 
      android:launchMode="singleTask" 
      android:screenOrientation="landscape" > 

      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 
       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
      <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/lib_device_filter" /> 

     </activity> 
    </application> 
</manifest> 
+0

您是否解決了這個問題? – jayeffkay

+0

是和否:需求已更改,因此兩個應用都合併到一個應用中 – JohnPlata

回答

2

我在一個項目發現了同樣的問題,我想與大家分享的 實施的解決方案。

首先,我做了一個叫做DumpActivity的活動。此活動僅實現意圖過濾器,以便在USB插入時收聽,就這些了。當活動啓動時,立即完成以返回到先前的活動。此時,以前的活動(您的示例中的活動A或B)能夠與USB進行交互。

/** 
* This activity have the intent filters of the USB (see AndroidManifest.xml). 
* 
* When it is the first time that the USB microphones are plugged, this activity is launched. 
* This is a solution to disable the popup dialog when a USB device is connected. 
* 
* When this activity is launched, immediately it is destroyed to return to the previous 
* activity 
*/ 

public class DumpActivity extends Activity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
    } 

    @Override 
    protected void onStart() { 
     super.onStart(); 
     if (getIntent().getAction().equals(UsbManager.ACTION_USB_DEVICE_ATTACHED)) { 
      finish(); 
     } 
    } 

    @Override 
    protected void onNewIntent(Intent intent) { 
     super.onNewIntent(intent); 
     if (intent.getAction().equals(UsbManager.ACTION_USB_DEVICE_ATTACHED)) { 
      finish(); 
     } 
    } 
} 

然後,在清單:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="mypackage.myapp" 
    android:versionCode="100" 
    android:versionName="1.0.0-dev" > 

    <uses-sdk 
     android:minSdkVersion="15" 
     android:targetSdkVersion="19" /> 

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> 

    <uses-permission android:name="android.permission.USB_PERMISSION" /> 
    <uses-feature android:name="android.hardware.usb.host" /> 
    <uses-feature android:name="android.hardware.usb.accessory" /> 
    <uses-feature android:name="android.hardware.usb.device" /> 

    <application 
     android:allowBackup="true" 
     android:icon="@drawable/my_icon" 
     android:theme="@style/AppTheme" > 
     <activity 
      android:name="mypackage.DumpActivity" 
      android:label="@string/app_name" 
      android:launchMode="singleTask" 
      android:screenOrientation="landscape" 
      android:theme="@android:style/Theme.Black.NoTitleBar" > 
      <intent-filter> 
       <action android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" /> 
       <action android:name="android.hardware.usb.action.USB_DEVICE_DETTACHED" /> 
      </intent-filter> 
      <meta-data 
       android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" 
       android:resource="@xml/lib_device_filter"> 
      </meta-data> 
      <meta-data 
       android:name="android.hardware.usb.action.USB_DEVICE_DETTACHED" 
       android:resource="@xml/lib_device_filter"> 
      </meta-data> 
     </activity> 
     <activity 
      android:name="mypackage.ActivityA" 
      android:icon="@drawable/my_icon" 
      android:label="@string/ActivityA" 
      android:launchMode="singleTask" 
      android:screenOrientation="landscape" > 
     </activity> 
     <activity 
      android:name="mypackage.ActivityB" 
      android:icon="@drawable/another_icon" 
      android:label="@string/ActivityB" 
      android:launchMode="singleTask" 
      android:screenOrientation="landscape" > 
     </activity> 
    </application> 
</manifest> 

注1:意圖過濾器必須是唯一在本次活動!

注2:如果您需要在不同活動中與USB進行交互,並且每次插入USB時不想看到彈出對話框,此解決方案將非常有用。

Marc G.

相關問題