简体   繁体   English

将setContentView(R.layout.main)移到Broadcast接收器类

[英]Moving the setContentView(R.layout.main) to the Broadcast receiver class

I have a mUsbReceiver ( BroadcastReceiver ) and CameraActivity . 我有一个mUsbReceiverBroadcastReceiver )和CameraActivity The receiver setContentView(R.layout.main) from CameraActivity via an Intent . 通过IntentCameraActivity接收到setContentView(R.layout.main) Then CamearActivity updates its View with this value. 然后, CamearActivity使用此值更新其View Notice that the setContentView is in the Broadcast receiver class and not in the CameraActivity Class. 请注意,setContentView在广播接收器类中,而不在CameraActivity类中。

public class CameraActivity extends Activity {

private static final String TAG = "openXC::Activity";

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);     
    usbConnection();

}

public void usbConnection() {
    UsbManager mUsbManager = (UsbManager) getSystemService(Context.USB_SERVICE);


   PendingIntent mPermissionIntent = PendingIntent.getBroadcast(this, 0, new Intent(ACTION_USB_PERMISSION), PendingIntent.FLAG_CANCEL_CURRENT);
    IntentFilter filter = new IntentFilter(ACTION_USB_PERMISSION);
   registerReceiver(mUsbReceiver, filter);
    String txt = "default";
    HashMap<String, UsbDevice> deviceList = mUsbManager.getDeviceList();
    Log.i(TAG, "Device List: " + deviceList);
    Iterator<UsbDevice> deviceIterator = deviceList.values().iterator();
    UsbDevice device = deviceIterator.next();
    Log.i(TAG, "Device List: " + deviceList);
    mUsbManager.requestPermission(device, mPermissionIntent);
}

private static final String ACTION_USB_PERMISSION ="com.ford.openxc.webcam.USB_PERMISSION";
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) {
                UsbDevice device = (UsbDevice)intent.getParcelableExtra(UsbManager.EXTRA_DEVICE);

                if (intent.getBooleanExtra(UsbManager.EXTRA_PERMISSION_GRANTED, false)) {
                    if(device != null){
                        Log.d(TAG, "Displayed Comten View " + device);
                        setContentView(R.layout.main);

                   }
                } 
                else {
                    Log.d(TAG, "permission denied for device " + device);
                }
            }
        }
    }
 };
}

This works fine sometimes but sometimes throws the following error 有时工作正常,但有时会引发以下错误

I/openXC::Activity( 5609): Device List: {/dev/bus/usb/001/002=UsbDevice[mName=/dev/bus/usb/001/002,mVendorId=1133,mProductId=2085,mClass=239,mSubclass=2,mProtocol=1,mInterfaces=[Landroid.os.Parcelable;@421a1f50]}
I/openXC::Activity( 5609): Device List: {/dev/bus/usb/001/002=UsbDevice[mName=/dev/bus/usb/001/002,mVendorId=1133,mProductId=2085,mClass=239,mSubclass=2,mProtocol=1,mInterfaces=[Landroid.os.Parcelable;@421a1f50]}
I/Adreno200-EGLSUB( 5609): <ConfigWindowMatch:2087>: Format RGBA_8888.
E/        ( 5609): <s3dReadConfigFile:75>: Can't open file for reading
E/        ( 5609): <s3dReadConfigFile:75>: Can't open file for reading
D/openXC::Activity( 5609): Displayed Comten View UsbDevice[mName=/dev/bus/usb/001/002,mVendorId=1133,mProductId=2085,mClass=239,mSubclass=2,mProtocol=1,mInterfaces=[Landroid.os.Parcelable;@421d3ed0]
D/WebcamPreview( 5609): WebcamPreview constructed

Technically, you can call setContentView any time you are executing on the event thread. 从技术上讲,您可以在事件线程上执行的任何时间调用setContentView。

Otherwise you need to use a Handler to call it. 否则,您需要使用处理程序来调用它。

Also, here are some usefull links that might help you: 另外,这里有一些有用的链接可能会对您有所帮助:

link1 链接1

link 2 连结2

link 3 连结3

I dont have much exp on USB sort of thing but since u said its saying cannot readfile.. i believe dat the error may be in the usb so for the debugging purpose i would suggest to move the setContentView(int) from if conditions to the onRecieve directly so dat whenever the onReceive is called ur contenview will change , this will help to ensure that the error is not with setcontentview... After dat u can see without setcontentview in the usb and now if the error is coming then surely the error is in the usb and not in the setContentView .... 我在USB方面没有太多经验,但是由于您说过它的说法无法读取文件。.我相信dat错误可能在usb中,因此出于调试目的,我建议将setContentView(int)从if条件移至onRecieve直接如此,每当调用onReceive的onReview时,它将更改,这将有助于确保该错误不与setcontentview ...在dat之后,您可以在usb中看到没有setcontentview的信息,现在,如果错误来了,那么肯定会出现错误在USB中,而不在setContentView中。

Hope it works :) 希望它能工作:)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM