我知道我可以使用这种清单配置的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设备时启动我的活动。问题是如果它已经在前台运行,我不希望它重新打开。如果我的应用程序的任何其他活动已经在前台运行,我也不希望它启动。怎么做?
答案 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。