ADB命令将流/图像推送到摄像机

时间:2018-11-23 10:11:58

标签: android automation android-emulator automated-tests adb

我需要编写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 :(得分:0)

您必须创建一个虚拟相机应用程序。大多数需要从摄像机捕获图像的应用都实现了这种逻辑。

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码扫描仪应用程序会认为它已经打开了合法的摄像头应用程序,但是您的虚拟应用程序将被打开,并且您的应用程序将返回您想要的图像