Команда ADB для передачи потока / изображения на камеру - PullRequest
0 голосов
/ 23 ноября 2018

Мне нужно написать код Java для выполнения какой-либо команды в целях автоматизации.то, чего я хочу добиться, это передать изображение на камеру.

Я попытался написать код для ввода текста через ADB, и это работает .. это выглядит так

public void inputTextByCode(String deviceId, String input) throws IOException{  
        welcomeTheTester();
        String commandStr = "input keyboard text ";

        Process process = null;
        String commandString = "";
        if(deviceId != null) {
            commandString = String.format("%s", "adb -s " + deviceId + " shell " + commandStr + input);
        } else {
            commandString = String.format("%s", "adb shell " + commandStr + input);
        }

        System.out.print("Command is "+commandString+"\n");
        try {
            process = ProcessHelper.runTimeExec(commandString);
        } catch (IOException e) {
        }
        BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
        String line;
        while ((line = reader.readLine()) != null) {
            System.out.print(line+"\n");
        }
    }

это будет производить ADBкоманда как

adb -s 192.168.28.101:5555 shell input keyboard text testing

Могу ли я сделать то же самое, но с камерой?Как я могу отправить изображение / какой-то поток на камеру Android?

1 Ответ

0 голосов
/ 12 декабря 2018

Вы должны создать фиктивное приложение камеры.Большинство приложений, которым требуется захват изображения с камеры, реализуют эту логику.

Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
if (takePictureIntent.resolveActivity(getPackageManager()) != null) {
   startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE);
}

и реализуют этот код для получения изображения с камеры.

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK) {
        Bundle extras = data.getExtras();
        Bitmap imageBitmap = (Bitmap) extras.get("data");
        mImageView.setImageBitmap(imageBitmap);
    }
}

Итак, вам нужно создать пустую камеруприложение, которое должно иметь активность, подобную этой

<activity
 android:name="com.android.camera.CaptureActivity"
 android:label="@string/app_name"
 android:theme="@style/Theme.Camera"
 android:configChanges="orientation|screenSize|keyboardHidden"
 android:windowSoftInputMode="stateAlwaysHidden|adjustPan">
 <intent-filter>
 <action android:name="android.media.action.IMAGE_CAPTURE" />
 <category android:name="android.intent.category.DEFAULT" />
 </intent-filter>
</activity>

, и вы должны вернуть что-то вроде этого.

Bitmap bitmap = CameraUtil.makeBitmap(data, 50 * 1024);
bitmap = CameraUtil.rotate(bitmap, orientation);
Log.v(TAG, "inlined bitmap into capture intent result");
mActivity.setResultEx(Activity.RESULT_OK,
Intent("inline-data").putExtra("data", bitmap));
mActivity.finish();

Таким образом, ваше приложение сканера QR-кода будет думать, что оно открыло настоящую камеруприложение, но ваше фиктивное приложение будет открыто, и ваше приложение вернет изображение, которое вы хотите

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...