所以逻辑是:
- 用户将 USB 连接到 Android 设备。
- 用户按下“查找更新”按钮。
- 该应用程序连接到 USB 并在主文件夹中找到任何 .apk 文件。
- 应用程序会打开 USB 中的 .apk 文件。
- .apk 运行并更新当前应用程序。
到目前为止我所拥有的:
findUpdate.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
boolean foundUsb = false;
usbManager = (UsbManager) getSystemService(Context.USB_SERVICE);
deviceList = usbManager.getDeviceList();
deviceIterator = deviceList.values().iterator();
Log.d("UPDATER", "Pressed");
while(deviceIterator.hasNext()){
UsbDevice device = deviceIterator.next();
Log.d("UPDATER", "Device Attached: " + device.getManufacturerName());
if (!Objects.equals(device.getManufacturerName(), gv.getManufacturerIDPlaca())) {
Log.d("UPDATER", device.getManufacturerName());
foundUsb = true;
PendingIntent mPermissionIntent = PendingIntent.getBroadcast(SetupActivity.this, 0, new Intent(ACTION_USB_PERMISSION), 0);
if (!usbManager.hasPermission(device)) {
Log.d("UPDATER", "No access");
usbManager.requestPermission(device, mPermissionIntent);
IntentFilter filter = new IntentFilter(ACTION_USB_PERMISSION);
}
Log.d("UPDATER", "Has access");
usbDevice = device;
usbInterface = usbDevice.getInterface(0);
usbEndpoint = usbInterface.getEndpoint(0);
usbDeviceConnection = usbManager.openDevice(usbDevice);
packetSize = usbEndpoint.getMaxPacketSize();
new Thread(new Runnable() {
public void run() {
final byte[] buffer = new byte[packetSize];
usbDeviceConnection.claimInterface(usbInterface, forceClaim);
usbDeviceConnection.bulkTransfer(usbEndpoint, buffer, packetSize, TIMEOUT);
Log.d("UPDATER", String.valueOf(buffer));
}
}).start();
}
}
if (!foundUsb) {
Toast.makeText(context, "No USB detected", Toast.LENGTH_SHORT).show();
}
}
});
这段代码在控制台中返回给我的是一个转换为字符串的缓冲区(字节)。
我想知道如何找到一个文件,比如说 app.apk 并打开它以实际更新当前应用程序(按下按钮的位置)。