0

I have already searched for how to pick images from camera and gallery with an intent. But, I can't implement it in my code. Can someone tell me how to implement it on my code? I had a headache with that.

Here is my MainActivity.java

public class MainActivity extends Activity implements OnClickListener{

private EditText nama, harga, kondisi, notelepon;

private TextView messageText;
private Button uploadButton, btnselectpic;
private ImageView imageview;
private int serverResponseCode = 0;
private ProgressDialog dialog = null;

private String upLoadServerUri = null;
private String imagepath=null;

@Override
public void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    nama = (EditText)findViewById(R.id.nama_barang);
    harga = (EditText)findViewById(R.id.harga_barang);
    kondisi = (EditText)findViewById(R.id.kondisi_barang);
    notelepon = (EditText)findViewById(R.id.no_telepon);

    uploadButton = (Button)findViewById(R.id.uploadButton);
    messageText  = (TextView)findViewById(R.id.messageText);
    btnselectpic = (Button)findViewById(R.id.button_selectpic);
    imageview = (ImageView)findViewById(R.id.imageView_pic);


    btnselectpic.setOnClickListener(this);
    uploadButton.setOnClickListener(this);
    upLoadServerUri = "http://192.168.43.226/kambing/UploadToServer.php";
}


@Override
public void onClick(View arg0) {
    if(arg0==btnselectpic)
    {
        Intent intent = new Intent();
        intent.setType("image/*");
        intent.setAction(Intent.ACTION_GET_CONTENT);
        startActivityForResult(Intent.createChooser(intent, "Complete action using"), 1);
    }
    else if (arg0==uploadButton) {

         dialog = ProgressDialog.show(MainActivity.this, "", "Uploading file...", true);
         messageText.setText("uploading started.....");
         new Thread(new Runnable() {

             public void run() {

                  uploadFile(imagepath);

             }
           }).start();     
    }

}


@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {

    if (requestCode == 1 && resultCode == RESULT_OK) {
        //Bitmap photo = (Bitmap) data.getData().getPath(); 

        Uri selectedImageUri = data.getData();
        imagepath = getPath(selectedImageUri);
        Bitmap bitmap=BitmapFactory.decodeFile(imagepath);
        imageview.setImageBitmap(bitmap);
        messageText.setText("Uploading file path:" +imagepath);

    }
}
     public String getPath(Uri uri) {
            String[] projection = { MediaStore.Images.Media.DATA };
            Cursor cursor = managedQuery(uri, projection, null, null, null);
            int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
            cursor.moveToFirst();
            return cursor.getString(column_index);
        }


public int uploadFile(String sourceFileUri) {

      String fileName = sourceFileUri;

      HttpURLConnection conn = null;
      DataOutputStream dos = null;  
      String lineEnd = "\r\n";
      String twoHyphens = "--";
      String boundary = "*****";
      int bytesRead, bytesAvailable, bufferSize;
      byte[] buffer;
      int maxBufferSize = 1 * 1024 * 1024; 
      File sourceFile = new File(sourceFileUri); 

      if (!sourceFile.isFile()) {

           dialog.dismiss(); 

           Log.e("uploadFile", "Source File not exist :"+imagepath);

           runOnUiThread(new Runnable() {
               public void run() {
                   messageText.setText("Source File not exist :"+ imagepath);
               }
           }); 

           return 0;

      }
      else
      {
           try { 

                 // open a URL connection to the Servlet
               FileInputStream fileInputStream = new FileInputStream(sourceFile);
               URL url = new URL(upLoadServerUri);
               String nm = nama.getText().toString();
               String hrg = harga.getText().toString();
               String knds = kondisi.getText().toString();
               String notlp = notelepon.getText().toString();
               // Open a HTTP  connection to  the URL
               conn = (HttpURLConnection) url.openConnection(); 
               conn.setDoInput(true); // Allow Inputs
               conn.setDoOutput(true); // Allow Outputs
               conn.setUseCaches(false); // Don't use a Cached Copy
               conn.setRequestMethod("POST");
               conn.setRequestProperty("Connection", "Keep-Alive");
               conn.setRequestProperty("ENCTYPE", "multipart/form-data");
               conn.setRequestProperty("Content-Type", "multipart/form-data;boundary=" + boundary);
               conn.setRequestProperty("uploaded_file", fileName);
               conn.setRequestProperty("uploaded_nama", nm);
               conn.setRequestProperty("uploaded_harga", hrg);
               conn.setRequestProperty("uploaded_kondisi", knds);
               conn.setRequestProperty("uploaded_notelepon", notlp);

               dos = new DataOutputStream(conn.getOutputStream());

               dos.writeBytes(twoHyphens + boundary + lineEnd);
               dos.writeBytes("Content-Disposition: form-data; name=uploaded_nama" + lineEnd); // name=uploaded_nama so you have to get PHP side using mobile_no
               dos.writeBytes(lineEnd);
               dos.writeBytes(nm); // nm is String variable
               dos.writeBytes(lineEnd);

               dos.writeBytes(twoHyphens + boundary + lineEnd);
               dos.writeBytes("Content-Disposition: form-data; name=uploaded_harga" + lineEnd); // name=uploaded_nama so you have to get PHP side using mobile_no
               dos.writeBytes(lineEnd);
               dos.writeBytes(hrg); // nm is String variable
               dos.writeBytes(lineEnd);

               dos.writeBytes(twoHyphens + boundary + lineEnd);
               dos.writeBytes("Content-Disposition: form-data; name=uploaded_kondisi" + lineEnd); // name=uploaded_nama so you have to get PHP side using mobile_no
               dos.writeBytes(lineEnd);
               dos.writeBytes(knds); // nm is String variable
               dos.writeBytes(lineEnd);

               dos.writeBytes(twoHyphens + boundary + lineEnd);
               dos.writeBytes("Content-Disposition: form-data; name=uploaded_notelepon" + lineEnd); // name=uploaded_nama so you have to get PHP side using mobile_no
               dos.writeBytes(lineEnd);
               dos.writeBytes(notlp); // nm is String variable
               dos.writeBytes(lineEnd);

               dos.writeBytes(twoHyphens + boundary + lineEnd); 
               dos.writeBytes("Content-Disposition: form-data; name=\"uploaded_file\";filename=\""
                                         + fileName + "\"" + lineEnd);

               dos.writeBytes(lineEnd);


               // create a buffer of  maximum size
               bytesAvailable = fileInputStream.available(); 

               bufferSize = Math.min(bytesAvailable, maxBufferSize);
               buffer = new byte[bufferSize];

               // read file and write it into form...
               bytesRead = fileInputStream.read(buffer, 0, bufferSize);  

               while (bytesRead > 0) {

                 dos.write(buffer, 0, bufferSize);
                 bytesAvailable = fileInputStream.available();
                 bufferSize = Math.min(bytesAvailable, maxBufferSize);
                 bytesRead = fileInputStream.read(buffer, 0, bufferSize);   

                }

               // send multipart form data necesssary after file data...
               dos.writeBytes(lineEnd);
               dos.writeBytes(twoHyphens + boundary + twoHyphens + lineEnd);

               // Responses from the server (code and message)
               serverResponseCode = conn.getResponseCode();
               String serverResponseMessage = conn.getResponseMessage();

               Log.i("uploadFile", "HTTP Response is : " 
                       + serverResponseMessage + ": " + serverResponseCode);

               if(serverResponseCode == 200){

                   runOnUiThread(new Runnable() {
                        public void run() {
                            String msg = "File Upload Completed.\n\n See uploaded file here : \n\n"
                                  +" C:/AppServ/www/kambing/uploads";
                            messageText.setText(msg);
                            Toast.makeText(MainActivity.this, "File Upload Complete.", Toast.LENGTH_SHORT).show();
                            //Intent i = new Intent(MainActivity.this,InputInfo.class);
                            finish();
                            //startActivity(i); 
                        }
                    });                
               }    

               //close the streams //
               fileInputStream.close();
               dos.flush();
               dos.close();

          }

           catch (MalformedURLException ex) {

              dialog.dismiss();  
              ex.printStackTrace();

              runOnUiThread(new Runnable() {
                  public void run() {
                      messageText.setText("MalformedURLException Exception : check script url.");
                      Toast.makeText(MainActivity.this, "MalformedURLException", Toast.LENGTH_SHORT).show();
                  }
              });

              Log.e("Upload file to server", "error: " + ex.getMessage(), ex);  
          } catch (Exception e) {

              dialog.dismiss();  
              e.printStackTrace();

              runOnUiThread(new Runnable() {
                  public void run() {
                      messageText.setText("Got Exception : see logcat ");
                      Toast.makeText(MainActivity.this, "Got Exception : see logcat ", Toast.LENGTH_SHORT).show();
                  }
              });
              Log.e("Upload file to server Exception", "Exception : "  + e.getMessage(), e);  
          }
          dialog.dismiss();       
          return serverResponseCode; 

       } // End else block 
     }
}
Hungry Coder
  • 1,800
  • 17
  • 22
Don
  • 25
  • 1
  • 6
  • Can you be more specific about what is not working? Do you get an exception? Is there anything in the Logcat? Do you get nulls where you expect some data? – Damian Petla Aug 22 '14 at 16:59
  • @Loop that code is working. but i have no idea to add an intent for taken image from camera. In my code the feature is only pick image from gallery and i want to make it to pick image from camera and gallery in 1 button. can you tell me how to do it? – Don Aug 22 '14 at 17:02
  • When you handle result from Gallery, start second intent immediately to launch camera. From user perspective it will look like you moved from Gallery to Camera and then back to your app. – Damian Petla Aug 22 '14 at 17:06
  • @Loop And how can I take the image file after i take the picture from camera? – Don Aug 22 '14 at 17:08
  • You will find example here http://developer.android.com/guide/components/intents-common.html#Camera Basically, you provide camera app with URI pointing where image should be stored, you have to give camera app permission if URI point to your private space. – Damian Petla Aug 22 '14 at 17:10

3 Answers3

0

There is no way to start 3rd party apps simultaneously, I mean showing their UIs at the same, it would not make sense.

However, you can start them in sequence. When one Activity finish and your onActivityResult() is called, start another Activity from that method.

From user perspective it will look like you moved to first and then to second Activity and at the end returned to your app.

Regarding capturing image from the Camera app, have a look this example. Google prepared examples for common intents where use of Camera is one of them.

It's important to understand that you need to know where image will be store before starting Camera app giving to the Intent valid URI. Also please note that URIs pointing to your private space require giving permission to the Camera app.

Damian Petla
  • 8,963
  • 5
  • 44
  • 47
0

I too had a similar requirement and this link worked great for me. Don't forget to add the permission
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> to your manifest

Community
  • 1
  • 1
nvinayshetty
  • 3,187
  • 1
  • 21
  • 32
0

Maybe you could be interested in RxPaparazzo. This is a library that take images from camera, gallery, file system, .... and you can forget to code it by yourself

Miguel Garcia
  • 1,389
  • 16
  • 16