2016-09-20 95 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文件应用程序将忽略您的文件夹

相关问题