mirror of
https://github.com/SimpleMobileTools/Simple-Camera.git
synced 2025-05-13 13:39:09 +02:00
offer the app at image_capture actions
This commit is contained in:
parent
cabc960317
commit
b4c76b4dfd
@ -25,6 +25,11 @@
|
|||||||
|
|
||||||
<category android:name="android.intent.category.LAUNCHER"/>
|
<category android:name="android.intent.category.LAUNCHER"/>
|
||||||
</intent-filter>
|
</intent-filter>
|
||||||
|
|
||||||
|
<intent-filter>
|
||||||
|
<action android:name="android.media.action.IMAGE_CAPTURE"/>
|
||||||
|
<category android:name="android.intent.category.DEFAULT"/>
|
||||||
|
</intent-filter>
|
||||||
</activity>
|
</activity>
|
||||||
|
|
||||||
<activity
|
<activity
|
||||||
|
@ -9,8 +9,10 @@ import android.hardware.Sensor;
|
|||||||
import android.hardware.SensorEvent;
|
import android.hardware.SensorEvent;
|
||||||
import android.hardware.SensorEventListener;
|
import android.hardware.SensorEventListener;
|
||||||
import android.hardware.SensorManager;
|
import android.hardware.SensorManager;
|
||||||
|
import android.net.Uri;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
|
import android.provider.MediaStore;
|
||||||
import android.support.v4.app.ActivityCompat;
|
import android.support.v4.app.ActivityCompat;
|
||||||
import android.support.v7.app.AppCompatActivity;
|
import android.support.v7.app.AppCompatActivity;
|
||||||
import android.view.SurfaceView;
|
import android.view.SurfaceView;
|
||||||
@ -31,13 +33,14 @@ import butterknife.BindView;
|
|||||||
import butterknife.ButterKnife;
|
import butterknife.ButterKnife;
|
||||||
import butterknife.OnClick;
|
import butterknife.OnClick;
|
||||||
|
|
||||||
public class MainActivity extends AppCompatActivity implements SensorEventListener, PreviewListener {
|
public class MainActivity extends AppCompatActivity implements SensorEventListener, PreviewListener, PhotoProcessor.MediaSavedListener {
|
||||||
@BindView(R.id.viewHolder) RelativeLayout viewHolder;
|
@BindView(R.id.viewHolder) RelativeLayout viewHolder;
|
||||||
@BindView(R.id.toggle_camera) ImageView toggleCameraBtn;
|
@BindView(R.id.toggle_camera) ImageView toggleCameraBtn;
|
||||||
@BindView(R.id.toggle_flash) ImageView toggleFlashBtn;
|
@BindView(R.id.toggle_flash) ImageView toggleFlashBtn;
|
||||||
@BindView(R.id.toggle_videocam) ImageView togglePhotoVideoBtn;
|
@BindView(R.id.toggle_videocam) ImageView togglePhotoVideoBtn;
|
||||||
@BindView(R.id.shutter) ImageView shutterBtn;
|
@BindView(R.id.shutter) ImageView shutterBtn;
|
||||||
@BindView(R.id.video_rec_curr_timer) TextView recCurrTimer;
|
@BindView(R.id.video_rec_curr_timer) TextView recCurrTimer;
|
||||||
|
@BindView(R.id.about) View aboutBtn;
|
||||||
|
|
||||||
private static final int CAMERA_STORAGE_PERMISSION = 1;
|
private static final int CAMERA_STORAGE_PERMISSION = 1;
|
||||||
private static final int AUDIO_PERMISSION = 2;
|
private static final int AUDIO_PERMISSION = 2;
|
||||||
@ -47,6 +50,7 @@ public class MainActivity extends AppCompatActivity implements SensorEventListen
|
|||||||
private boolean isInPhotoMode;
|
private boolean isInPhotoMode;
|
||||||
private boolean isAskingPermissions;
|
private boolean isAskingPermissions;
|
||||||
private boolean isCameraAvailable;
|
private boolean isCameraAvailable;
|
||||||
|
private boolean isImageCaptureIntent;
|
||||||
private int currVideoRecTimer;
|
private int currVideoRecTimer;
|
||||||
private int orientation;
|
private int orientation;
|
||||||
private int currCamera;
|
private int currCamera;
|
||||||
@ -58,6 +62,18 @@ public class MainActivity extends AppCompatActivity implements SensorEventListen
|
|||||||
requestWindowFeature(Window.FEATURE_NO_TITLE);
|
requestWindowFeature(Window.FEATURE_NO_TITLE);
|
||||||
getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
|
getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
|
||||||
tryInitCamera();
|
tryInitCamera();
|
||||||
|
|
||||||
|
final Intent intent = getIntent();
|
||||||
|
if (intent != null && intent.getExtras() != null && intent.getAction().equals(MediaStore.ACTION_IMAGE_CAPTURE)) {
|
||||||
|
isImageCaptureIntent = true;
|
||||||
|
togglePhotoVideoBtn.setVisibility(View.GONE);
|
||||||
|
aboutBtn.setVisibility(View.GONE);
|
||||||
|
|
||||||
|
final Object output = intent.getExtras().get(MediaStore.EXTRA_OUTPUT);
|
||||||
|
if (output != null && output instanceof Uri) {
|
||||||
|
preview.setTargetUri((Uri) output);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void tryInitCamera() {
|
private void tryInitCamera() {
|
||||||
@ -347,4 +363,12 @@ public class MainActivity extends AppCompatActivity implements SensorEventListen
|
|||||||
public int getCurrentOrientation() {
|
public int getCurrentOrientation() {
|
||||||
return orientation;
|
return orientation;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void mediaSaved() {
|
||||||
|
if (isImageCaptureIntent) {
|
||||||
|
setResult(RESULT_OK);
|
||||||
|
finish();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
package com.simplemobiletools.camera;
|
package com.simplemobiletools.camera;
|
||||||
|
|
||||||
import android.content.Context;
|
import android.net.Uri;
|
||||||
import android.os.AsyncTask;
|
import android.os.AsyncTask;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
|
||||||
@ -8,35 +8,66 @@ import java.io.File;
|
|||||||
import java.io.FileNotFoundException;
|
import java.io.FileNotFoundException;
|
||||||
import java.io.FileOutputStream;
|
import java.io.FileOutputStream;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
import java.lang.ref.WeakReference;
|
||||||
|
|
||||||
public class PhotoProcessor extends AsyncTask<byte[], Void, Void> {
|
public class PhotoProcessor extends AsyncTask<byte[], Void, Void> {
|
||||||
private static final String TAG = PhotoProcessor.class.getSimpleName();
|
private static final String TAG = PhotoProcessor.class.getSimpleName();
|
||||||
private static Context mContext;
|
private static WeakReference<MainActivity> mActivity;
|
||||||
|
private static Uri mUri;
|
||||||
|
|
||||||
public PhotoProcessor(Context context) {
|
public PhotoProcessor(MainActivity activity, Uri uri) {
|
||||||
mContext = context;
|
mActivity = new WeakReference<>(activity);
|
||||||
|
mUri = uri;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected Void doInBackground(byte[]... params) {
|
protected Void doInBackground(byte[]... params) {
|
||||||
final String photoPath = Utils.getOutputMediaFile(mContext, true);
|
FileOutputStream fos = null;
|
||||||
if (photoPath.isEmpty()) {
|
String path;
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
final File photoFile = new File(photoPath);
|
if (mUri != null) {
|
||||||
|
path = mUri.getPath();
|
||||||
|
} else {
|
||||||
|
path = Utils.getOutputMediaFile(mActivity.get(), true);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (path.isEmpty()) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
final File photoFile = new File(path);
|
||||||
final byte[] data = params[0];
|
final byte[] data = params[0];
|
||||||
final FileOutputStream fos = new FileOutputStream(photoFile);
|
fos = new FileOutputStream(photoFile);
|
||||||
fos.write(data);
|
fos.write(data);
|
||||||
fos.close();
|
fos.close();
|
||||||
Utils.scanFile(photoPath, mContext);
|
Utils.scanFile(path, mActivity.get().getApplicationContext());
|
||||||
} catch (FileNotFoundException e) {
|
} catch (FileNotFoundException e) {
|
||||||
Log.d(TAG, "PhotoProcessor file not found: " + e.getMessage());
|
Log.e(TAG, "PhotoProcessor file not found: " + e.getMessage());
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
Log.e(TAG, "PhotoProcessor ioexception " + e.getMessage());
|
Log.e(TAG, "PhotoProcessor ioexception " + e.getMessage());
|
||||||
|
} finally {
|
||||||
|
if (fos != null) {
|
||||||
|
try {
|
||||||
|
fos.close();
|
||||||
|
} catch (IOException e) {
|
||||||
|
Log.e(TAG, "PhotoProcessor close ioexception " + e.getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onPostExecute(Void aVoid) {
|
||||||
|
super.onPostExecute(aVoid);
|
||||||
|
MediaSavedListener listener = mActivity.get();
|
||||||
|
if (listener != null) {
|
||||||
|
listener.mediaSaved();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public interface MediaSavedListener {
|
||||||
|
void mediaSaved();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,12 +1,12 @@
|
|||||||
package com.simplemobiletools.camera;
|
package com.simplemobiletools.camera;
|
||||||
|
|
||||||
import android.app.Activity;
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.graphics.Rect;
|
import android.graphics.Rect;
|
||||||
import android.hardware.Camera;
|
import android.hardware.Camera;
|
||||||
import android.media.CamcorderProfile;
|
import android.media.CamcorderProfile;
|
||||||
import android.media.MediaPlayer;
|
import android.media.MediaPlayer;
|
||||||
import android.media.MediaRecorder;
|
import android.media.MediaRecorder;
|
||||||
|
import android.net.Uri;
|
||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
import android.view.MotionEvent;
|
import android.view.MotionEvent;
|
||||||
@ -34,7 +34,7 @@ public class Preview extends ViewGroup implements SurfaceHolder.Callback, View.O
|
|||||||
private static SurfaceView surfaceView;
|
private static SurfaceView surfaceView;
|
||||||
private static Camera.Size previewSize;
|
private static Camera.Size previewSize;
|
||||||
private static boolean canTakePicture;
|
private static boolean canTakePicture;
|
||||||
private static Activity activity;
|
private static MainActivity activity;
|
||||||
private static int currCameraId;
|
private static int currCameraId;
|
||||||
private static boolean isFlashEnabled;
|
private static boolean isFlashEnabled;
|
||||||
private static Camera.Parameters parameters;
|
private static Camera.Parameters parameters;
|
||||||
@ -47,12 +47,13 @@ public class Preview extends ViewGroup implements SurfaceHolder.Callback, View.O
|
|||||||
private static int lastClickX;
|
private static int lastClickX;
|
||||||
private static int lastClickY;
|
private static int lastClickY;
|
||||||
private static int initVideoRotation;
|
private static int initVideoRotation;
|
||||||
|
private static Uri targetUri;
|
||||||
|
|
||||||
public Preview(Context context) {
|
public Preview(Context context) {
|
||||||
super(context);
|
super(context);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Preview(Activity act, SurfaceView sv, PreviewListener cb) {
|
public Preview(MainActivity act, SurfaceView sv, PreviewListener cb) {
|
||||||
super(act);
|
super(act);
|
||||||
|
|
||||||
activity = act;
|
activity = act;
|
||||||
@ -120,6 +121,10 @@ public class Preview extends ViewGroup implements SurfaceHolder.Callback, View.O
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setTargetUri(Uri uri) {
|
||||||
|
targetUri = uri;
|
||||||
|
}
|
||||||
|
|
||||||
private static int getPreviewRotation(int cameraId) {
|
private static int getPreviewRotation(int cameraId) {
|
||||||
final Camera.CameraInfo info = Utils.getCameraInfo(cameraId);
|
final Camera.CameraInfo info = Utils.getCameraInfo(cameraId);
|
||||||
int degrees = getRotationDegrees();
|
int degrees = getRotationDegrees();
|
||||||
@ -200,7 +205,7 @@ public class Preview extends ViewGroup implements SurfaceHolder.Callback, View.O
|
|||||||
}
|
}
|
||||||
}, PHOTO_PREVIEW_LENGTH);
|
}, PHOTO_PREVIEW_LENGTH);
|
||||||
|
|
||||||
new PhotoProcessor(getContext()).execute(data);
|
new PhotoProcessor(activity, targetUri).execute(data);
|
||||||
if (isFlashEnabled) {
|
if (isFlashEnabled) {
|
||||||
parameters.setFlashMode(Camera.Parameters.FLASH_MODE_OFF);
|
parameters.setFlashMode(Camera.Parameters.FLASH_MODE_OFF);
|
||||||
camera.setParameters(parameters);
|
camera.setParameters(parameters);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user