Android意图过滤器重新启动Activity?

罗曼

我正在开发与平板电脑连接时可与USB设备通信的应用程序。为了避免用户接受android访问设备,我设置了一个意图过滤器:

<intent-filter>
            <action android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" />
            <action android:name="android.hardware.usb.action.USB" />
        </intent-filter>
        <meta-data android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" android:resource="@xml/usb_device_filter" />

我的问题是,有了这个意图过滤器,每次插入设备并启动另一个活动时,都会调用“ onCreate”方法,而没有意图过滤器,则只会调用一次。这是“ onCreate”方法:

@Override   
protected void onCreate(Bundle savedInstanceState) {    
    try {   
        super.onCreate(savedInstanceState);         
        setContentView(R.layout.activity_msp430_hid);               //define activity layout
        setVersionToTitle();    
        btnSend = (Button) findViewById(R.id.btnSend);      //Send button
        btnSend.setOnClickListener(this);                   //Listener for Send Button
        btnSend.setEnabled(true);
        btnSelectHIDDevice = (Button) findViewById(R.id.btnSelectHIDDevice);    //Select HID Device button
        btnSelectHIDDevice.setOnClickListener(this);        //Listener for Select HID Device button
        btnClear = (Button) findViewById(R.id.btnClear);    //Clear button
        btnClear.setOnClickListener(this);                  //Listener for Clear button
        edtxtHidInput = (EditText) findViewById(R.id.edtxtHidInput);    //User editable text area for sending information to attached device        
        log_txt = (EditText) findViewById(R.id.log_txt);    //Text area for displaying information      
        mLog("Initialized\nPlease select your USB HID device");         
        getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);    
        mPermissionIntent = PendingIntent.getBroadcast(this, 0, new Intent(ACTION_USB_PERMISSION), 0);  //Get USB permission intent for broadcast
        IntentFilter filter = new IntentFilter(ACTION_USB_PERMISSION);
        filter.addAction(UsbManager.ACTION_USB_DEVICE_ATTACHED);
        filter.addAction(UsbManager.ACTION_USB_DEVICE_DETACHED);
        registerReceiver(mUsbReceiver, filter);             //Register broadcast receiver
        edtxtHidInput.setText("Enter Text Here");   
        uiHandler.postDelayed(runnable, 100);               //Start runnable after 100ms

    } catch (Exception e) {
        Log.e("Init", "Initialization error", e);

    }   
}

广播接收器:

private final BroadcastReceiver mUsbReceiver = new BroadcastReceiver() {
    public void onReceive(Context context, Intent intent) {
        String action = intent.getAction();
        if (ACTION_USB_PERMISSION.equals(action)) {
            synchronized (this) {
                setDevice(intent);
            }
        }
        //device attached
        if (UsbManager.ACTION_USB_DEVICE_ATTACHED.equals(action)) {
            synchronized (this) {
                setDevice(intent);      //Connect to the selected device
            }
            if (device == null) {
                mLog("device connected");
            }
        }
        //device detached
        if (UsbManager.ACTION_USB_DEVICE_DETACHED.equals(action)) {
            if (device != null) {
                device = null;
                //btnSend.setEnabled(false);
            }
            mLog("device disconnected");
        }
    }

简单地连接到设备的“ setDevice”方法:

private void setDevice(Intent intent) {
    device = (UsbDevice) intent.getParcelableExtra(UsbManager.EXTRA_DEVICE);
    if (device != null && intent.getBooleanExtra(UsbManager.EXTRA_PERMISSION_GRANTED, false)) {
        mLog("Selected device VID:" + Integer.toHexString(device.getVendorId()) + " PID:" + Integer.toHexString(device.getProductId()));
        connection = mUsbManager.openDevice(device);        //Connect to device
        intf = device.getInterface(0);

为什么呢

雅库布·特尔科夫斯基(Jakub Turcovsky)

显然,这是默认行为。android:launchMode 在这里检查

默认的launchMode为standard,这意味着每次您连接USB设备时,都会创建一个新的Activity实例。如果设置了singleToponNewIntent()则会被调用,并且如果您的活动位于堆栈的顶部,则会重新使用您的活动。否则,它将创建一个新的。

在大多数情况下,您也可以使用singleTasksingleInstance但Google不鼓励这样做。但是有时候这可能是解决问题的正确方法。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章