2015-01-10 11 views
8

मैं एक ऐसा एप्लीकेशन विकसित कर रहा हूं जहां मुझे गैलरी या कैमरे से छवि अपलोड करने के लिए एक संवाद चुनने की आवश्यकता है। मुझे यहां Dialog to pick image from gallery or from camera का समाधान मिला है, लेकिन समस्या यह है कि उपयोगकर्ता द्वारा कौन सी कार्रवाई चुनी जाती है, इसकी तुलना में संघर्ष है।व्हाट्सएप एडिटप्रोफाइल जैसे एंड्रॉइड में कैमरा या गैलरी एप्लिकेशन के लिए इरादा चयनकर्ता कैसे करें?

मैं जानना चाहता हूं कि मैं इस कोड में संशोधित कर सकता हूं और गैलरी या कैमरा को अलग करने के लिए कुछ परिणाम प्राप्त कर सकता हूं और फिर कार्रवाई लागू कर सकता हूं।

उत्तर

11

मुख्य गतिविधि फ़ाइल बुलाया "selectImage()" .. में नई पद्धति बनाएं के लिए चयन विकल्प

private void selectImage() { 
    final CharSequence[] items = { "Take Photo", "Choose from Library", 
      "Cancel" }; 

    AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this); 
    builder.setTitle("Add Photo!"); 
    builder.setItems(items, new DialogInterface.OnClickListener() { 
     @Override 
     public void onClick(DialogInterface dialog, int item) { 
      if (items[item].equals("Take Photo")) { 
       Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
       File f = new File(android.os.Environment 
         .getExternalStorageDirectory(), "temp.jpg"); 
       intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(f)); 
       startActivityForResult(intent, REQUEST_CAMERA); 
      } else if (items[item].equals("Choose from Library")) { 
       Intent intent = new Intent(
         Intent.ACTION_PICK, 
         android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); 
       intent.setType("image/*"); 
       startActivityForResult(
         Intent.createChooser(intent, "Select File"), 
         SELECT_FILE); 
      } else if (items[item].equals("Cancel")) { 
       dialog.dismiss(); 
      } 
     } 
    }); 
    builder.show(); 
} 

अब हम उचित परिणाम के साथ वापस हमारे गतिविधि पर लौटने की जरूरत है।

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    if (resultCode == RESULT_OK) { 
     if (requestCode == REQUEST_CAMERA) { 
      File f = new File(Environment.getExternalStorageDirectory() 
        .toString()); 
      for (File temp : f.listFiles()) { 
       if (temp.getName().equals("temp.jpg")) { 
        f = temp; 
        break; 
       } 
      } 
      try { 
       Bitmap bm; 
       BitmapFactory.Options btmapOptions = new BitmapFactory.Options(); 

       bm = BitmapFactory.decodeFile(f.getAbsolutePath(), 
         btmapOptions); 

       // bm = Bitmap.createScaledBitmap(bm, 70, 70, true); 
       ivImage.setImageBitmap(bm); 

       String path = android.os.Environment 
         .getExternalStorageDirectory() 
         + File.separator 
         + "Phoenix" + File.separator + "default"; 
       f.delete(); 
       OutputStream fOut = null; 
       File file = new File(path, String.valueOf(System 
         .currentTimeMillis()) + ".jpg"); 
       try { 
        fOut = new FileOutputStream(file); 
        bm.compress(Bitmap.CompressFormat.JPEG, 85, fOut); 
        fOut.flush(); 
        fOut.close(); 
       } catch (FileNotFoundException e) { 
        e.printStackTrace(); 
       } catch (IOException e) { 
        e.printStackTrace(); 
       } catch (Exception e) { 
        e.printStackTrace(); 
       } 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
     } else if (requestCode == SELECT_FILE) { 
      Uri selectedImageUri = data.getData(); 

      String tempPath = getPath(selectedImageUri, MainActivity.this); 
      Bitmap bm; 
      BitmapFactory.Options btmapOptions = new BitmapFactory.Options(); 
      bm = BitmapFactory.decodeFile(tempPath, btmapOptions); 
      ivImage.setImageBitmap(bm); 
     } 
    } 
} 

public String getPath(Uri uri, Activity activity) { 
    String[] projection = { MediaColumns.DATA }; 
    Cursor cursor = activity 
      .managedQuery(uri, projection, null, null, null); 
    int column_index = cursor.getColumnIndexOrThrow(MediaColumns.DATA); 
    cursor.moveToFirst(); 
    return cursor.getString(column_index); 
} 
+0

इस का पालन करें यह अधिक विचार देगा http://www.theappguruz.com/blog/android-take-photo-camera-gallery-code-sample/ –

+0

क्या getPath (उरी यूरी, संदर्भ संदर्भ) करता है? मैं इसे अपनी गतिविधि पर उपयोग नहीं कर सकता। – EduardoMaia

+0

मेरी इच्छा है कि मैं आपका कोड –

5

बस एक सलाह onactivity में इस विधि जोड़ें() जब आप startActivityForResult() फोन कैमरे के साथ एक तस्वीर लेने के लिए:

Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
if (cameraIntent.resolveActivity(getPackageManager()) != null) { 
     startActivityForResult(cameraIntent, REQUEST_CAMERA); 
} 

सूचना है कि startActivityForResult() विधि द्वारा संरक्षित है एक शर्त जो resolveActivity() पर कॉल करती है, जो पहला गतिविधि घटक देता है जो इरादे को संभाल सकता है। इस चेक को निष्पादित करना महत्वपूर्ण है क्योंकि यदि आप startActivityForResult() पर किसी ऐसे इरादे का उपयोग करके कॉल करते हैं जिसे कोई ऐप संभाल नहीं सकता है, तो आपका ऐप क्रैश हो जाएगा। इसलिए जब तक परिणाम शून्य नहीं है, तब तक इरादे का उपयोग करना सुरक्षित है।

संबंधित मुद्दे