I am successfully taking the camera photo and then video, now when i am sending it on the server, nothing is happening?
How to send the key and value to php-mysql server?
I am getting username, email and branch_id stored but not the image and video because i don't know what and where should i code.
I have already tried below but confused: https://www.androidhive.info/2014/12/android-uploading-camera-image-video-to-server-with-progress-bar/
Please check below classes RegistrationImageActivity.java & RegistrationVideoActivity.java.
RegistrationSelfieActivity.java
import android.Manifest;
import android.content.ContentValues;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.Bundle;
import android.os.StrictMode;
import android.provider.MediaStore;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.Toast;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import com.maxmoney.branchattendance.model.MultipartUtility;
import com.maxmoney.branchattendance.utilities.StandardProgressDialog;
import java.io.File;
import java.io.IOException;
public class RegistrationSelfieActivity extends AppCompatActivity {
// LogCat tag
private static final String TAG = RegistrationSelfieActivity.class.getSimpleName();
private StandardProgressDialog mProgressDialog;
// Camera activity request codes
private static final int CAMERA_CAPTURE_IMAGE_REQUEST_CODE = 100;
public static final int MEDIA_TYPE_IMAGE = 1;
private Uri fileUri; // file url to store image/video
private Button mContinue;
private ImageView imageCaptureSelfie;
String email, password, branch_id;
String image_file = "";
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.register_selfie_activity);
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
mProgressDialog = new StandardProgressDialog(this.getWindow().getContext());
email = getIntent().getStringExtra("email");
password = getIntent().getStringExtra("password");
branch_id = getIntent().getStringExtra("branch_id");
ActivityCompat.requestPermissions(this, new String[]{
Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.CAMERA
}, 1);
imageCaptureSelfie = findViewById(R.id.imageView);
imageCaptureSelfie.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
imageCaptureSelfie.setVisibility(View.GONE);
captureImage();
imageCaptureSelfie.setVisibility(View.VISIBLE);
}
});
mContinue = findViewById(R.id.continue_next_selfie);
mContinue.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (fileUri == null) {
Toast.makeText(getApplicationContext(), "Take Picture first", Toast.LENGTH_LONG).show();
} else {
try {
testfirst();
Intent intent = new Intent(RegistrationSelfieActivity.this, RegistrationVideoActivity.class);
intent.putExtra("email", email);
intent.putExtra("password", password);
intent.putExtra("branch_id", branch_id);
intent.putExtra("username", email);
startActivity(intent);
} catch (IOException e) {
e.printStackTrace();
}
}
}
});
// Checking camera availability
if (!isDeviceSupportCamera()) {
Toast.makeText(getApplicationContext(), "Sorry! Your device doesn't support camera", Toast.LENGTH_LONG).show();
// will close the app if the device does't have camera
finish();
}
}
private void testfirst() throws IOException {
String charset = "UTF-8";
String requestURL = "https://www.maxmoney.com/my/app/android/brachattendence/registration.php";
MultipartUtility multipart = new MultipartUtility(requestURL, charset);
multipart.addFormField("email", email);
multipart.addFormField("password", password);
multipart.addFormField("branch_id", branch_id);
multipart.addFormField("username", email);
File imageFile = new File(getPath(fileUri));
multipart.addFilePart("imageFile", imageFile);
String response = String.valueOf(multipart.finish());
mProgressDialog.show();
Log.d("response", response);
/* try {
JSONArray obj = new JSONArray(response);
if(obj.getString(Integer.parseInt("status")).equals("true")){
Toast.makeText(getApplicationContext(), obj.getString(Integer.parseInt("message")), Toast.LENGTH_SHORT)
.show();
}else{
Toast.makeText(getApplicationContext(), obj.getString(Integer.parseInt("message")), Toast.LENGTH_SHORT)
.show();
}
} catch (JSONException e) {
e.printStackTrace();
} */
}
/**
* Checking device has camera hardware or not
*/
private boolean isDeviceSupportCamera() {
if (getApplicationContext().getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA)) {
// this device has a camera
return true;
} else {
// no camera on this device
return false;
}
}
private void captureImage() {
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
ContentValues values = new ContentValues(1);
values.put(MediaStore.Images.Media.MIME_TYPE, "varun.jpg");
fileUri = getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri);
startActivityForResult(intent, CAMERA_CAPTURE_IMAGE_REQUEST_CODE);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == CAMERA_CAPTURE_IMAGE_REQUEST_CODE) {
if (resultCode == RESULT_OK) {
try {
Bitmap varunBITMAP = MediaStore.Images.Media.getBitmap(this.getContentResolver(), fileUri);
imageCaptureSelfie.setImageBitmap(varunBITMAP);
} catch (IOException e) {
e.printStackTrace();
}
} else if (resultCode == RESULT_CANCELED) {
Toast.makeText(getApplicationContext(), "User cancelled image capture", Toast.LENGTH_SHORT).show();
} else {
// failed to capture image
Toast.makeText(getApplicationContext(), "Sorry! Failed to capture image", Toast.LENGTH_SHORT).show();
}
}
}
public String getPath(Uri uri) {
String[] projection = {MediaStore.Images.Media.DATA};
Cursor cursor = getContentResolver().query(uri, projection, null, null, null);
if (cursor == null) return null;
int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
String s = cursor.getString(column_index);
cursor.close();
return s;
}
}
The actual result should be storage of image and video on the server.
PHP fields (PARAMETERS):
username (String)
email (String)
password (String)
branch_id (JSON STRING)
videoFile (FILE)
imageFile (FILE)
RegistrationVideoActivity.class
package com.maxmoney.branchattendance;
import android.content.ContentValues;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.os.StrictMode;
import android.provider.MediaStore;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.Toast;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import com.maxmoney.branchattendance.model.MultipartUtility;
import java.io.File;
import java.io.IOException;
public class RegistrationVideoActivity extends AppCompatActivity {
// LogCat tag
private static final String TAG = RegistrationVideoActivity.class.getSimpleName();
// Camera activity request codes
private static final int CAMERA_CAPTURE_VIDEO_REQUEST_CODE = 200;
public static final int MEDIA_TYPE_VIDEO = 2;
private Uri fileUriVideo; // file url to store image/video
private ImageView captureVideo;
private String email, password, branch_id, imageFile;
private Button upload;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.register_video_activity);
StrictMode.VmPolicy.Builder builder = new StrictMode.VmPolicy.Builder();
StrictMode.setVmPolicy(builder.build());
email = getIntent().getStringExtra("email");
password = getIntent().getStringExtra("password");
branch_id = getIntent().getStringExtra("branch_id");
// image or video path that is captured in previous activity
imageFile = getIntent().getStringExtra("filePath");
captureVideo = findViewById(R.id.videoView);
captureVideo.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
recordVideo();
}
});
upload = findViewById(R.id.continue_upload);
upload.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (fileUriVideo == null) {
Toast.makeText(getApplicationContext(), "Take Video first", Toast.LENGTH_LONG).show();
} else {
try {
videoTest();
Intent intent = new Intent(RegistrationVideoActivity.this, LoginActivity.class);
intent.putExtra("email", email);
intent.putExtra("password", password);
intent.putExtra("branch_id", branch_id);
intent.putExtra("username", email);
startActivity(intent);
} catch (IOException e) {
e.printStackTrace();
}
}
}
});
// Checking camera availability
if (!isDeviceSupportCamera()) {
Toast.makeText(getApplicationContext(), "Sorry! Your device doesn't support camera", Toast.LENGTH_LONG).show();
// will close the app if the device does't have camera
finish();
}
}
private boolean isDeviceSupportCamera() {
if (getApplicationContext().getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA)) {
// this device has a camera
return true;
} else {
// no camera on this device
return false;
}
}
//record video
private void recordVideo() {
Intent intent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);
ContentValues values = new ContentValues(1);
values.put(MediaStore.Video.Media.MIME_TYPE, "amir.jpeg");
fileUriVideo = getContentResolver().insert(MediaStore.Video.Media.EXTERNAL_CONTENT_URI, values);
intent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 1);
intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUriVideo); // set the video file
startActivityForResult(intent, CAMERA_CAPTURE_VIDEO_REQUEST_CODE);
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putParcelable("file_uri", fileUriVideo);
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
// get the file url
fileUriVideo = savedInstanceState.getParcelable("file_uri");
}
/**
* Receiving activity result method will be called after closing the camera
*/
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == CAMERA_CAPTURE_VIDEO_REQUEST_CODE) {
if (resultCode == RESULT_OK) {
Uri videoUri = data.getData();
if (requestCode == CAMERA_CAPTURE_VIDEO_REQUEST_CODE) {
if (resultCode == RESULT_OK) {
Toast.makeText(this, "Video saved to:
" + videoUri, Toast.LENGTH_LONG).show();
} else if (resultCode == RESULT_CANCELED) {
Toast.makeText(this, "Video recording cancelled.", Toast.LENGTH_LONG).show();
} else {
Toast.makeText(this, "Failed to record video", Toast.LENGTH_LONG).show();
}
}
} else if (resultCode == RESULT_CANCELED) {
Toast.makeText(getApplicationContext(), "User cancelled video capture", Toast.LENGTH_SHORT).show();
} else {
// failed to capture image
Toast.makeText(getApplicationContext(), "Sorry! Failed to video image", Toast.LENGTH_SHORT).show();
}
}
}
private void videoTest() throws IOException {
String charset = "UTF-8";
String requestURL = "https://www.maxmoney.com/my/app/android/brachattendence/registration.php";
MultipartUtility multipart = new MultipartUtility(requestURL, charset);
multipart.addFormField("email", email);
multipart.addFormField("password", password);
multipart.addFormField("branch_id", branch_id);
multipart.addFormField("username", email);
File mediaFile = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/myvideo.mp4");
Intent intent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);
Uri videoUri = Uri.fromFile(mediaFile);
intent.putExtra(MediaStore.EXTRA_OUTPUT, videoUri);
startActivityForResult(intent, CAMERA_CAPTURE_VIDEO_REQUEST_CODE);
// mProgressDialog.show();
String response = String.valueOf(multipart.finish());
Log.d("response", response);
Toast.makeText(getApplicationContext(), "Success", Toast.LENGTH_SHORT).show();
/* try {
JSONArray obj = new JSONArray(response);
if(obj.getString(Integer.parseInt("status")).equals("true")){
Toast.makeText(getApplicationContext(), obj.getString(Integer.parseInt("message")), Toast.LENGTH_SHORT)
.show();
}else{
Toast.makeText(getApplicationContext(), obj.getString(Integer.parseInt("message")), Toast.LENGTH_SHORT)
.show();
}
} catch (JSONException e) {
e.printStackTrace();
}
*/
}
public String getPathVideo(Uri uri) {
String[] projection = {MediaStore.Video.Media.DATA};
Cursor cursor = getContentResolver().query(uri, projection, null, null, null);
if (cursor == null) return null;
int column_index = cursor.getColumnIndexOrThrow(MediaStore.Video.Media.DATA);
cursor.moveToFirst();
String s = cursor.getString(column_index);
cursor.close();
return s;
}
}