通过系统相机应用对通道1和2各拍一张照片

master
Matthew 10 months ago
parent 7ba47d2b5b
commit 126949d49f

@ -337,61 +337,17 @@ public class MicroPhotoService extends Service {
Log.i(TAG, "PhotoTimer Fired: CH=" + channel + " PR=" + preset); Log.i(TAG, "PhotoTimer Fired: CH=" + channel + " PR=" + preset);
mService.notifyToTakePhoto(mService.mNativeHandle, channel, preset, ts, photoOrVideo); mService.notifyToTakePhoto(mService.mNativeHandle, channel, preset, ts, photoOrVideo);
}
if (channel == 2) { {
final String appPath = MicroPhotoContext.buildMpAppDir(context); final String appPath = MicroPhotoContext.buildMpAppDir(context);
mService.mHander.postDelayed(new Runnable() {
new Thread(new Runnable() {
@Override @Override
public void run() { public void run() {
try {
Thread.sleep(20000);
} catch (Exception ex) {
ex.printStackTrace();
}
final long requestTime = System.currentTimeMillis() / 1000;
CameraAdb cameraAdb = new CameraAdb(context, appPath); CameraAdb cameraAdb = new CameraAdb(context, appPath);
cameraAdb.takePhoto(); cameraAdb.takePhoto();
mService.mHander.postDelayed(new Runnable() {
@Override
public void run() {
long takingTime = System.currentTimeMillis() / 1000;
String photoPath = appPath + "photos/";
String photoFile = "IMG_" + Long.toHexString(requestTime).toUpperCase() + "_2_FF_0_" + Long.toHexString(requestTime).toUpperCase() + "_" + Long.toHexString(takingTime).toUpperCase() + ".jpg";
File cameraPath = new File("/sdcard/DCIM/Camera/");
Optional<File> opFile = Arrays.stream(cameraPath.listFiles(File::isFile))
.max((f1, f2) -> Long.compare(f1.lastModified(), f2.lastModified()));
boolean res = false;
if (opFile.isPresent()) {
File targetFile = new File(new File(photoPath), photoFile);
try {
File srcFile = opFile.get();
// FilesUtils.copyFile(srcFile, targetFile);
res = srcFile.renameTo(targetFile);
SysApi.forceStopApp(context, "com.mediatek.camera");
restartApp(context, MicroPhotoContext.PACKAGE_NAME_MPAPP);
} catch (Exception e) {
e.printStackTrace();
}
if (!res) {
Log.e(TAG, "Failed to copy photo from Camera");
}
}
}
}, 4000);
}
}).start();
} }
}, 20000);
} }
} }

@ -4,10 +4,15 @@ import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.util.Log; import android.util.Log;
import com.dev.devapi.api.SysApi;
import com.xypower.common.FilesUtils; import com.xypower.common.FilesUtils;
import com.xypower.common.MicroPhotoContext;
import com.xypower.mpapp.MicroPhotoService;
import com.xypower.mpapp.v2.Camera2VideoActivity; import com.xypower.mpapp.v2.Camera2VideoActivity;
import java.io.File; import java.io.File;
import java.util.Arrays;
import java.util.Optional;
import dadb.AdbKeyPair; import dadb.AdbKeyPair;
import dadb.AdbShellResponse; import dadb.AdbShellResponse;
@ -41,18 +46,66 @@ public class CameraAdb {
} }
public void takePhoto() { public void takePhoto() {
(new Thread(new Runnable() { new Thread(new Runnable() {
@Override @Override
public void run() { public void run() {
takePhotoImpl();
}
}).start();
}
private void takePhotoImpl() {
long requestTime = System.currentTimeMillis() / 1000;
takePhoto(false);
long takingTime = System.currentTimeMillis() / 1000;
movePhoto(false, requestTime, takingTime);
SysApi.forceStopApp(mContext, "com.mediatek.camera");
try { try {
runImpl(); Thread.sleep(2000);
} catch (Exception ex) { } catch (Exception ex) {
ex.printStackTrace(); ex.printStackTrace();
} }
requestTime = System.currentTimeMillis() / 1000;
takePhoto(true);
takingTime = System.currentTimeMillis() / 1000;
movePhoto(true, requestTime, takingTime);
SysApi.forceStopApp(mContext, "com.mediatek.camera");
MicroPhotoService.restartApp(mContext, MicroPhotoContext.PACKAGE_NAME_MPAPP);
} }
private void runImpl() { private void movePhoto(boolean frontCamera, long requestTime, long takingTime) {
String photoPath = mAppPath + "photos/";
String photoFile = "IMG_" + Long.toHexString(requestTime).toUpperCase() + "_"
+ (frontCamera ? "2" : "1") + "_FF_0_" + Long.toHexString(requestTime).toUpperCase()
+ "_" + Long.toHexString(takingTime).toUpperCase() + ".jpg";
File cameraPath = new File("/sdcard/DCIM/Camera/");
Optional<File> opFile = Arrays.stream(cameraPath.listFiles(File::isFile))
.max((f1, f2) -> Long.compare(f1.lastModified(), f2.lastModified()));
boolean res = false;
if (opFile.isPresent()) {
File targetFile = new File(new File(photoPath), photoFile);
try {
File srcFile = opFile.get();
res = srcFile.renameTo(targetFile);
} catch (Exception e) {
e.printStackTrace();
}
if (!res) {
Log.e(TAG, "Failed to copy photo from Camera");
}
}
}
public void takePhoto(final boolean frontCamera) {
Dadb adb = Dadb.discover(mDeviceIp, mAdbKeyPair); Dadb adb = Dadb.discover(mDeviceIp, mAdbKeyPair);
if (adb == null) { if (adb == null) {
@ -63,11 +116,14 @@ public class CameraAdb {
boolean res = false; boolean res = false;
String[] cmds = { String[] cmds = {
"content insert --uri content://settings/system --bind name:s:accelerometer_rotation --bind value:i:0",
"content insert --uri content://settings/system --bind name:s:user_rotation --bind value:i:1",
"am force-stop com.mediatek.camera", "am force-stop com.mediatek.camera",
"setprop mtk.camera.app.keycode.enable 1", "setprop mtk.camera.app.keycode.enable 1",
"setprop mtk.camera.switch.camera.debug 1", "setprop mtk.camera.switch.camera.debug 1",
"setprop mtk.camera.switch.id.debug back-1", "setprop mtk.camera.switch.id.debug back-1",
"am start -a android.media.action.STILL_IMAGE_CAMERA --ez com.google.assistant.extra.USE_FRONT_CAMERA true -f " + Integer.toString(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP), "am start -a android.media.action.STILL_IMAGE_CAMERA " +
(frontCamera ? "--ez com.google.assistant.extra.USE_FRONT_CAMERA true" : "") + " -f " + Integer.toString(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP),
"wait", "wait",
"input keyevent 27"}; "input keyevent 27"};
@ -94,10 +150,6 @@ public class CameraAdb {
Log.i(TAG, line); Log.i(TAG, line);
} }
} }
}
} }
})).start();
} }
} }

Loading…
Cancel
Save