2017-12-04 9 views
0

おかげで申し訳ありませんが、私たちがインテントを使って写真を撮る場所を解決できません。ネイティブカメラのデフォルトの動作は、デフォルトのディレクトリ/ O.Sの場所に画像を保存することです。カメラアプリを使用してクリックしたときに画像を保存したくないという要件がいくつかあります。この問題の解決策が必要です。すぐに削除することができたら、すぐに削除するか、O.SにImageを保存することを許可しない代替手段が必要なのか、助けてください。カメラの意図 - 方法?

私が試したコードですが、ディレクトリを作成していくつかの方法を試した後、ファイルを削除しても何も動作しません。

public void takeImageFromCamera() { 

     Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
     startActivityForResult(cameraIntent, CAMERA_REQUEST); 
    } 


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

// Check for the integer request code originally supplied to startResolutionForResult(). 
     if (requestCode == CAMERA_REQUEST && resultCode == RESULT_OK) { 

      if (isCameraPermissionGranted()) { 
       bitmap= (Bitmap) data.getExtras().get("data"); 
       // bitmap = processReuiredImage(picUri); 
       getProfileDetailViaFace(encodeImageBitmapToString(bitmap)); 
       Log.d("path",String.valueOf(Environment.getExternalStoragePublicDirectory(
         Environment.DIRECTORY_PICTURES))); 

       // getApplicationContext().getContentResolver().delete(, "/storage/emulated/0/Pictures", null); 
      //  mediaStorageDir.getPath().delete(); 


      } else { 
       requestCameraPermission(); 
      } 
     } 

public void takeImageFromCamera() { 

    File file = getOutputMediaFile(CAMERA_FILE_TYPE); 

    if (Build.VERSION.SDK_INT >= 24) { 
     try { 

      Method m = StrictMode.class.getMethod("disableDeathOnFileUriExposure"); 
      m.invoke(null); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 
    picUri = Uri.fromFile(file); 

    Intent takePictureIntent = new 
    Intent(MediaStore.ACTION_IMAGE_CAPTURE_SECURE); 
    takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, picUri); 
    if (takePictureIntent.resolveActivity(getPackageManager()) != null) { 
     startActivityForResult(takePictureIntent, CAMERA_REQUEST); 
    } 
    } 

    private File getOutputMediaFile(int type) { 
    mediaStorageDir = new 
    File(Environment.getExternalStoragePublicDirectory(
      Environment.DIRECTORY_PICTURES), "peppercard"); 

    /**Create the storage directory if it does not exist*/ 
    if (!mediaStorageDir.exists()) { 
     if (!mediaStorageDir.mkdirs()) { 
      return null; 
     } 
    } 

    /**Create a media file name*/ 
    String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date()); 

    if (type == CAMERA_FILE_TYPE) { 
     mediaFile = new File(mediaStorageDir.getPath() + File.separator + 
       "IMG_" + timeStamp + ".jpeg"); 
    } else { 
     return null; 
    } 

} return mediaFile;

}

+0

あなたは自分のカメラを作って、意図を使わないでください。 – zihadrizkyef

+0

ギャラリーアプリケーションでファイルを表示したくないので、今のように外部ストレージの代わりにプライベート内部ストレージを使用する必要があります。 – greenapps

+0

さらにファイルプロバイダを使用する必要があります。不可能ではありません。 – greenapps

答えて

2

事は、私がイメージを保存するか否かの決定がアップしているカメラアプリ

を使用してクリックしたときに、私は絵を保存したくないいくつかの要件がありますあなたはカメラアプリではなく、あなたに。 ACTION_IMAGE_CAPTUREに応答する可能性がある何百ものカメラアプリがあり、それらのアプリの開発者は何でも好きなことをすることができます。

、この問題の解決策になる、それは私たちが写真を撮った後、我々はすぐにそれを削除することができ、または我々はOSイメージを保存することはできませんそれによって代替がなければならないようなもの、

ばなりません

カメラのAPIやライブラリを包む(CameraKit-Android、Fotoapparatなど)、自分で写真を撮ってください。

+0

あなたの応答をありがとうので、surfaceHolderと他のものを使用するようなカスタムカメラを実装する必要があるようです。 – user8754981

+0

@ user8754981:もう一度言及したようなサードパーティ製のライブラリは、これを単純化して 'SurfaceView' /' TextureView'のようなものを扱います。 – CommonsWare

+0

もう1つのことは、Moto G3、v-6.​​0、およびlenovoタブレット、v6.0で同じコードを使用していますが、イメージは保存されないが、タブレットはモトを使用してイメージをクリックします。だから私は、タブレットでこの問題を解決する方法がなければならないと思っていました。 – user8754981

0
There has to be a solution of this issue, be it like once we take 
a picture we could delete it right away 

実際にあります。カメラアプリケーションがイメージをファイルに格納する必要があるパス(ファイルプロバイダを使用する場合もある)を指定できます。

カメラアプリケーションが終了したら、そのファイルから画像を取得してからファイルを削除できます。

Intent.EXTRA_OUTPUTをご覧ください。

かなり標準的なご質問です。このサイトでは、多くのサンプルコードを見つけることができます。

+0

ありがとう、私は、getContentResolver()。delete(picUri、null、null);でアクティビティの結果の画像を削除しようとしましたが、正しいURLを見つけられません。 – user8754981

+0

しかし、「カメラアプリケーションが画像をファイルに保存する必要がある場合は、ファイルプロバイダを使用してもパスを指定できます。」私はそれを行うことができますが、私は作成した外部ディレクトリからファイルを削除しますが、それはギャラリーからファイルを削除しません。 – user8754981

+0

私は何度も何度も検索しましたが、何も動作していないようですが、余分な出力も試しましたが、まだファイルを保存しています。しかし私は私自身でそれを管理することができるカスタムカメラを作成することを考えることができます – user8754981

0

ファイナル私は過去2日間待ってから答えを見つけました。それは、アクティビティから戻った後にファイルを削除するだけなので、ファイルを保存しません。

String [] projection = {MediaStore.Images.Media.DATA};

カーソルカーソル= managedQuery(MediaStore.Images.Media.EXTERNAL_CONTENT_URI、投影、NULL、NULL、NULL)

INT column_index_data = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA)。 cursor.moveToLast();

    String imagePath = cursor.getString(column_index_data); 
        Bitmap bitmapImage = BitmapFactory.decodeFile(imagePath); 
        Log.d("bitmapImage", bitmapImage.toString());      /*delete file after taking picture*/ 
        Log.d("imagePath", imagePath.toString()); 
        File f = new File(imagePath); 
        if (f.exists()){ 
         f.delete(); 

        } 

sendBroadcast(newIntent(intent.ACTION_MEDIA_SCANNER_SCAN_FILE、Uri。fromFile(f)));

関連する問題