2016-09-20 97 views
2

我試圖拍照並將其保存在內部存儲器中,所以這樣,只有我的應用程序才能訪問圖片 我該怎麼做?我想了很多事情沒有成功,甚至從谷歌的官方文檔被破壞,這是我的實際代碼,即在公共目錄節省:拍照並將其保存在內部存儲器

@Override 
    protected void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_pictures); 

     imageView = (ImageView)findViewById(R.id.imageView); 
     fabNewPicture = (FloatingActionButton)findViewById(R.id.fab_new_picture); 
     fabNewPicture.setOnClickListener(new View.OnClickListener() 
     { 
      @Override 
      public void onClick(View v) { 
       takePicture(v); 
      } 
     }); 

     if(ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) 
     { 
      ActivityCompat.requestPermissions(this, new String[] { Manifest.permission.CAMERA, Manifest.permission.WRITE_EXTERNAL_STORAGE }, 0); 
     } 
    } 

    private void takePicture(View v) 
    { 
     Intent i = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
     file = Uri.fromFile(getOutputMediaFile()); 
     i.putExtra(MediaStore.EXTRA_OUTPUT, file); 

     startActivityForResult(i, 100); 
    } 

    private static File getOutputMediaFile() 
    { 
     File mediaStorageDir = new File(Environment.getExternalStoragePublicDirectory(
       Environment.DIRECTORY_PICTURES), "FotoAula"); 

     if (!mediaStorageDir.exists()){ 
      if (!mediaStorageDir.mkdirs()){ 
       return null; 
      } 
     } 

     String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date()); 
     return new File(mediaStorageDir.getPath() + File.separator + 
       "IMG_"+ timeStamp + ".jpg"); 
    } 

    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     if (requestCode == 100) { 
      if (resultCode == RESULT_OK) { 
       imageView.setImageURI(file); 
      } 
     } 
    } 

但這樣的畫面將成爲大衆和現有甚至畫廊,我不希望這樣,因爲我需要添加一些數據庫信息與每張圖片,所以我需要他們對我的應用程序是私人的...

我該怎麼做?

謝謝!

+0

這是可能適合您的答案: http://stackoverflow.com/questions/22574350/how-to-keep-images-private-to-the-app-and-not-可在畫廊中查看 –

+0

你可以做兩件事..第一次保存您的圖像與週期(。)前綴。這會隱藏你的圖片庫。第二 - 參考這個https://developer.android.com/guide/topics/data/data-storage.html#filesInternal使用openFileOutput(FILENAME,Context.MODE_PRIVATE);並保存你的圖片。 – RajSharma

+0

。 preffix會更像是一個解決方法嗎?還是真的在這種情況下使用? – user3159043

回答

2

如果將圖片保存在SD卡或外部存儲上,任何應用程序都可以訪問它。嘗試獲取私人目錄並將照片保存在那裏。從here

用來創建和寫入的私人文件到內部存儲:

與文件的名稱和操作模式1 - 電話openFileOutput()。這返回一個FileOutputStream.

write() 2寫入文件。

3 - 用close()關閉流。

例如:

String FILENAME = "hello_file"; 
String string = "hello world!"; 

FileOutputStream fos = openFileOutput(FILENAME, Context.MODE_PRIVATE); 
fos.write(string.getBytes()); 
fos.close(); 

閱讀「使用內部存儲」:Link

+0

我試圖做到這一點,但我努力讓它的工作,因爲我沒有理解的拍攝照片的概念很多 – user3159043

+0

您的應用程序不需要拍攝照片本身,圖片是從您的設備中的相機應用程序響應意圖通過您的應用發送。您需要閱讀圖片並複製到內部存儲器。 請閱讀這篇文章: https://developer.android.com/training/camera/photobasics.html –

-2

私有內部存儲不存在。保存圖片時,嘗試刪除後綴。然後它不是其他應用程序的圖片。

+0

但我可以用這種方式保存照片嗎?如何在沒有後綴的情況下顯示後者?只有當我展示時才添加它?用戶卸載應用程序時刪除的存儲如何?這不是內部? – user3159043

+0

它是字節而不是後綴,用於定義文件的內容。即使沒有後綴,圖片也總是圖片。您可以在應用程序中確實顯示沒有後綴的圖片。 –

+0

如果您選擇將其保存在SDCard上,那麼卸載後照片仍將保留在那裏。 –

0

你在哪裏保存您的照片,然後媒體掃描儀在其他您可以創建文件夾中.nomedia文件應用程序將忽略您的文件夾

相關問題