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