簡體   English   中英

將setContentView(R.layout.main)移到Broadcast接收器類

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

我有一個mUsbReceiverBroadcastReceiver )和CameraActivity 通過IntentCameraActivity接收到setContentView(R.layout.main) 然后, CamearActivity使用此值更新其View 請注意,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);
                }
            }
        }
    }
 };
}

有時工作正常,但有時會引發以下錯誤

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

從技術上講,您可以在事件線程上執行的任何時間調用setContentView。

否則,您需要使用處理程序來調用它。

另外,這里有一些有用的鏈接可能會對您有所幫助:

鏈接1

連結2

連結3

我在USB方面沒有太多經驗,但是由於您說過它的說法無法讀取文件。.我相信dat錯誤可能在usb中,因此出於調試目的,我建議將setContentView(int)從if條件移至onRecieve直接如此,每當調用onReceive的onReview時,它將更改,這將有助於確保該錯誤不與setcontentview ...在dat之后,您可以在usb中看到沒有setcontentview的信息,現在,如果錯誤來了,那么肯定會出現錯誤在USB中,而不在setContentView中。

希望它能工作:)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM