2017-02-26 5 views
1

Ich weiß, dass ich USB-Host-Modus mit diesem Manifest Konfiguration verwenden kann:USB-Host: Wie öffne ich meine App nur, wenn sie nicht schon im Vordergrund ist?

<activity 
    android:name="com.mypackage.MyActivity" 
    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> 

Und das wird meine Tätigkeit jedes Mal, wenn ein USB-Gerät angeschlossen starten. Das Problem ist, dass ich nicht möchte, dass es wieder geöffnet wird, wenn es bereits im Vordergrund ausgeführt wird. Ich möchte auch nicht, dass es startet, wenn eine andere der Aktivitäten meiner App bereits im Vordergrund läuft. Wie geht das?

Antwort

0

Endlich habe ich den Weg gefunden. Ich habe in meinem Manifest einen neuen Empfänger hinzugefügt:

<receiver android:name=".content.UsbReceiver"> 

    <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" /> 

</receiver> 

, die das Ereignis auf diese Weise behandelt:

public class UsbReceiver extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     if (!CustomApplication.resumed) { 
      Context applicationContext = context.getApplicationContext(); 
      Intent startIntent = new Intent(applicationContext, MyActivity.class); 
      startIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
      applicationContext.startActivity(startIntent); 
     } 
    } 

} 

wo resumed ein statisches Feld Application Klasse in meiner Gewohnheit ist:

public class CustomApplication extends Application { 

    public static boolean resumed = false; 

} 

Ich legte den Wert dieses Feldes in der übergeordneten Klasse aller meiner Aktivitäten:

public abstract class AbstractActivity extends Activity { 

    @Override 
    protected void onResume() { 
     super.onResume(); 
     CustomApplication.resumed = true; 
    } 

    @Override 
    protected void onPause() { 
     CustomApplication.resumed = false; 
     super.onPause(); 
    } 

} 

Auf diese Weise starte ich MyActivity nur, wenn keine meiner Aktivitäten bereits im Vordergrund ist.

Verwandte Themen