USB主机:只有当它不在前台时才能打开我的应用程序?

时间:2017-02-26 18:38:14

标签: java android android-manifest intentfilter android-usb

我知道我可以使用这种清单配置的USB主机模式:

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

这将在每次连接USB设备时启动我的活动。问题是如果它已经在前台运行,我不希望它重新打开。如果我的应用程序的任何其他活动已经在前台运行,我也不希望它启动。怎么做?

1 个答案:

答案 0 :(得分:0)

我终于找到了要走的路。我在我的清单中添加了一个新的接收器:

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);
        }
    }

}

以这种方式处理事件:

resumed

其中Application是我的自定义public class CustomApplication extends Application { public static boolean resumed = false; } 类中的静态字段:

public abstract class AbstractActivity extends Activity {

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

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

}

我在所有活动的父类中设置此字段的值:

<li>

通过这种方式,只有当我的活动都不在前台时,我才真正启动MyActivity。