2016-08-24 10 views
-1

私は、USBを介して温度センサーとの通信を処理するためにUSBレシーバーを使用しています。アプリケーションはすべての電話機でUSB許可を要求します

これまでのところすべてうまくいきましたが、電話を再起動した場合、を再起動した直後に、USB-Permissionのポップアップが直接スローされます瞬間

この奇妙な問題を引き起こしていることのアイデアは誰にもありますか?

[EDIT:アプリケーションはUSB許可を求めていないごめんなさい、私は「このデバイスが接続されている」場合はアプリを開きたい場合はポップアップが求められますが、付属の一切の装置は明らかにありません。

//Initial USB Settings Receiver 
private final BroadcastReceiver mUsbReceiver = new BroadcastReceiver() { 

    @Override 
    public void onReceive(final Context context, final Intent intent) { 
     final String action = intent.getAction(); 

     if (ACTION_USB_PERMISSION.equals(action)) { 
      synchronized (this) { 
       final UsbDevice device = intent.getParcelableExtra(UsbManager.EXTRA_DEVICE); 

       // is usb permission has been granted, try to open a connection 
       if (intent.getBooleanExtra(UsbManager.EXTRA_PERMISSION_GRANTED, false)) { 
        if (device != null) { 
         // call method to set up device communication 
         Constants result = mcp2221.open(); 

         if (result != Constants.SUCCESS) { 
          //nothing by now 
         } else { 
          openConnectionToMCP2221(); 
         } 
        } 
       } 
      } 
     } 

     if (UsbManager.ACTION_USB_DEVICE_DETACHED.equals(action)) { 
      // close the connection and release all resources 
      closeAllResources(); 
      // leave a bit of time for the COM thread to close 
      try { 
       Thread.sleep(20); 
      }catch(InterruptedException e){e.printStackTrace();} 
      mcp2221Comm = null; 
      Toast.makeText(getApplicationContext(), "Device detached", 
        Toast.LENGTH_SHORT).show(); 
     } 

     if (UsbManager.ACTION_USB_DEVICE_ATTACHED.equals(action)) { 
      final UsbDevice device = intent.getParcelableExtra(UsbManager.EXTRA_DEVICE); 
      if (device != null) { 
       Toast.makeText(getApplicationContext(), "Device attached", 
         Toast.LENGTH_SHORT).show(); 
       mStopUSBThread=false; 

       // only try to connect if an MCP2221 is attached 
       if (device.getVendorId() == MCP2221_VID && device.getProductId() == MCP2221_PID) { 
        Constants result = mcp2221.open(); 

        switch (result) { 
         case SUCCESS: 
          openConnectionToMCP2221(); 
          break; 
         case CONNECTION_FAILED: 
          Toast.makeText(getApplicationContext(), "ERROR: connection failed", Toast.LENGTH_SHORT).show(); 
          break; 
         case NO_USB_PERMISSION: 
          Toast.makeText(getApplicationContext(), "ERROR: no USB permission", Toast.LENGTH_SHORT).show(); 
          mcp2221.requestUsbPermission(mPermissionIntent); 
          break; 
         default: 
          break; 
        } 
       } 
      } 
     } 

    } 
}; 

そして、ここでのonCreate()一部です::]

ここではUSBレシーバのコードである

//USB Connection 
    mPermissionIntent = PendingIntent.getBroadcast(this, 0, new Intent(ACTION_USB_PERMISSION), 0); 
    final IntentFilter filter = new IntentFilter(ACTION_USB_PERMISSION); 

    filter.addAction(UsbManager.ACTION_USB_DEVICE_DETACHED); 
    filter.addAction(UsbManager.ACTION_USB_DEVICE_ATTACHED); 
    registerReceiver(mUsbReceiver, filter); 
    //Checking if theres a Device already connected 
    ....... 
+0

アプリのコードは多分ですか? 'android.intent.action.BOOT_COMPLETED'レシーバーはありますか? – maciekjanusz

+0

いくつかのコードを追加します。 いいえ、App-startで接続されたデバイスを一度確認するだけではなく、Sensorが既に接続されている場合にのみ、USB ReceiverはATTACHEDおよびDETACHEDデバイスをリッスンし、一度許可を求めます。 – TheStriker0815

答えて

0

がそれを手に入れました! それは<activity>下のAndroidManifest.xmlに宣言された

<intent-filter> 
      <action android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED"/> 
</intent-filter> 

ました。

私はこのバグを引き起こした理由を完全には理解していませんが、問題を取り除いている間に私のアプリケーションの機能を維持しています。

センサーが電話機に接続されている場合、アプリケーションは開くように要求しないという「否定的な」側面のみである可能性があります。

関連する問題