Android代碼實現(xiàn)創(chuàng)建隱藏文件夾或文件

今天業(yè)務(wù)提出需求說,app調(diào)用系統(tǒng)相機拍出的照片,在相冊里可以看到。考慮到安全性,業(yè)務(wù)說拍出的照片,不應(yīng)該讓用戶看到。思考了一下, 我決定創(chuàng)建一個隱藏文件夾,用戶看不到照片內(nèi)容。

先看效果(這里在手機內(nèi)存里創(chuàng)建了一個名為yangliu的文件夾,文件夾里包含另一個叫picture的文件夾,文件夾里是用戶拍的照片):
沒隱藏前.gif
隱藏照片.gif
隱藏文件夾.gif
Android創(chuàng)建隱藏文件或者文件夾,并對其讀寫操作。android創(chuàng)建隱藏文件或者文件夾,其實只要在文件名或者文件夾名字前加一個點號即可。 隱藏的文件(夾)可直接進行讀寫。 下面帶來代碼片段:

MainActivity代碼

 package com.e_valmont.look_lookdemo;

import android.content.Intent;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.Toast;

import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Date;

public class MainActivity extends AppCompatActivity {

    private static final String TAG = "MainActivity";
    private Button cameraButton;//照相按鈕
    private ImageView photoImageView;//顯示相片
    private static final int REQUEST_CODE = 1;
    private String strImgPath = "";//照片保存路徑
    private File imageFile = null;//照片文件
    /** 定義相片的最大尺寸 **/
    private final int IMAGE_MAX_WIDTH = 540;
    private final int IMAGE_MAX_HEIGHT = 960;

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

        cameraButton.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                Intent getPhoto = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
                strImgPath = Environment.getExternalStorageDirectory().toString() + "/yangliu/picture/";//文件夾名字,在文件夾前加".",就可以隱藏文件夾
                //strImgPath = Environment.getExternalStorageDirectory().toString() + "/yangliu/.picture/";//隱藏文件夾代碼,已注釋
                String fileName = new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()) + ".jpg";// 照片以格式化日期方式命名,在照片前加".",就可以隱藏照片。eg:20170420182400.jpg
                //String fileName = "."+new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()) + ".jpg";//隱藏照片代碼,已注釋
                File out = new File(strImgPath);
                if (!out.exists()) {
                    out.mkdirs();
                }
                out = new File(strImgPath, fileName);
                strImgPath = strImgPath + fileName;// 該照片的絕對路徑
                Uri uri = Uri.fromFile(out);
                getPhoto.putExtra(MediaStore.EXTRA_OUTPUT, uri);//根據(jù)uri保存照片
                getPhoto.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 1);//保存照片的質(zhì)量
                startActivityForResult(getPhoto, REQUEST_CODE);//啟動相機拍照
            }
        });

    }

    /**
     * 視圖初始化
     */
    private void iniView() {
        cameraButton = (Button) findViewById(R.id.take_photo);
        photoImageView = (ImageView) findViewById(R.id.photo_view);
    }

    /**
     * 返回照片結(jié)果處理
     */
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (resultCode == RESULT_OK && requestCode == REQUEST_CODE) {
            imageFile = new File(strImgPath);
            int scale = 0;
            scale = getZoomScale(imageFile);//得到縮放倍數(shù)
            Log.i(TAG, "scale = "+scale);
            BitmapFactory.Options options = new BitmapFactory.Options();
            options.inSampleSize = scale;
            photoImageView.setImageBitmap(BitmapFactory.decodeFile(strImgPath,options));//按指定options顯示圖片防止OOM
        }else {
            Toast.makeText(MainActivity.this,"失敗", Toast.LENGTH_LONG).show();
        }
    }

    /**
     * 圖片縮放處理
     * @param imageFile 照片文件
     * @return 縮放的倍數(shù)
     */
    private int getZoomScale(File imageFile) {
        int scale = 1;
        BitmapFactory.Options options = new BitmapFactory.Options();
        options.inJustDecodeBounds = true;
        BitmapFactory.decodeFile(strImgPath, options);
        while (options.outWidth / scale >= IMAGE_MAX_WIDTH || options.outHeight / scale >= IMAGE_MAX_HEIGHT) {
            scale *= 2;
        }
        return scale;
    }
}


activity_main.xml代碼(很簡單,一個拍照按鈕,一個imageView來顯示照片)

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
                xmlns:tools="http://schemas.android.com/tools"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:paddingBottom="@dimen/activity_vertical_margin"
                android:paddingLeft="@dimen/activity_horizontal_margin"
                android:paddingRight="@dimen/activity_horizontal_margin"
                android:paddingTop="@dimen/activity_vertical_margin"
                tools:context=".MainActivity" >

    <Button
        android:id="@+id/take_photo"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        android:text="Button" />

    <ImageView
        android:id="@+id/photo_view"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="140dp"
        android:src="@mipmap/ic_launcher" />

</RelativeLayout>

布局效果圖:

布局圖.png
代碼已測試,拍過的照片確實在本地找不到。但是這也會造成一個現(xiàn)象:用戶找不到占內(nèi)存的文件夾,所以無法清理,導(dǎo)致內(nèi)存越來越大。所以也需要定時清理這個文件夾,或者當用戶不需要這個照片時,可以做些清除操作。

如果這個文章對你有用,請收藏或喜歡,如果能加一下關(guān)注,那就更好了!


嘿嘿嘿
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 173,076評論 25 708
  • Ubuntu的發(fā)音 Ubuntu,源于非洲祖魯人和科薩人的語言,發(fā)作 oo-boon-too 的音。了解發(fā)音是有意...
    螢火蟲de夢閱讀 99,524評論 9 467
  • 今天聽最新一期的邏輯思維,講的是古典老師的《超級個體》,最讓我眼前一亮的是人生中的一些節(jié)點,轉(zhuǎn)折點,形象一點說來就...
    羲子閱讀 1,502評論 0 1
  • 至胡中九三3班那群傻子------老黑 偶然間 想起你 想起我們之間的點點滴滴 那么快樂 那么美好 ...
    若水羽仙閱讀 281評論 0 2
  • 這個函數(shù)用于判斷文件是否成功打開。它不僅具有判斷文件是否成功打開的功能,而且能判斷是否文件采用了合適的方式被打開。...
    Stroman閱讀 2,230評論 0 0