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

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

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

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;// 該照片的絕對(duì)路徑
                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);//啟動(dòng)相機(jī)拍照
            }
        });

    }

    /**
     * 視圖初始化
     */
    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代碼(很簡單孙蒙,一個(gè)拍照按鈕项棠,一個(gè)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
代碼已測試,拍過的照片確實(shí)在本地找不到马篮。但是這也會(huì)造成一個(gè)現(xiàn)象:用戶找不到占內(nèi)存的文件夾沾乘,所以無法清理,導(dǎo)致內(nèi)存越來越大浑测。所以也需要定時(shí)清理這個(gè)文件夾翅阵,或者當(dāng)用戶不需要這個(gè)照片時(shí)歪玲,可以做些清除操作。

如果這個(gè)文章對(duì)你有用掷匠,請收藏或喜歡滥崩,如果能加一下關(guān)注,那就更好了讹语!


嘿嘿嘿
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末钙皮,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子顽决,更是在濱河造成了極大的恐慌短条,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,884評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件才菠,死亡現(xiàn)場離奇詭異茸时,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)赋访,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,755評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門可都,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人蚓耽,你說我怎么就攤上這事渠牲。” “怎么了步悠?”我有些...
    開封第一講書人閱讀 158,369評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵签杈,是天一觀的道長。 經(jīng)常有香客問我贤徒,道長芹壕,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,799評(píng)論 1 285
  • 正文 為了忘掉前任接奈,我火速辦了婚禮,結(jié)果婚禮上通孽,老公的妹妹穿的比我還像新娘序宦。我一直安慰自己,他們只是感情好背苦,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,910評(píng)論 6 386
  • 文/花漫 我一把揭開白布互捌。 她就那樣靜靜地躺著,像睡著了一般行剂。 火紅的嫁衣襯著肌膚如雪秕噪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 50,096評(píng)論 1 291
  • 那天厚宰,我揣著相機(jī)與錄音腌巾,去河邊找鬼遂填。 笑死,一個(gè)胖子當(dāng)著我的面吹牛澈蝙,可吹牛的內(nèi)容都是我干的吓坚。 我是一名探鬼主播,決...
    沈念sama閱讀 39,159評(píng)論 3 411
  • 文/蒼蘭香墨 我猛地睜開眼灯荧,長吁一口氣:“原來是場噩夢啊……” “哼礁击!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起逗载,我...
    開封第一講書人閱讀 37,917評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤哆窿,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后厉斟,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體更耻,經(jīng)...
    沈念sama閱讀 44,360評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,673評(píng)論 2 327
  • 正文 我和宋清朗相戀三年捏膨,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了秧均。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,814評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡号涯,死狀恐怖目胡,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情链快,我是刑警寧澤誉己,帶...
    沈念sama閱讀 34,509評(píng)論 4 334
  • 正文 年R本政府宣布,位于F島的核電站域蜗,受9級(jí)特大地震影響巨双,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜霉祸,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,156評(píng)論 3 317
  • 文/蒙蒙 一筑累、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧丝蹭,春花似錦慢宗、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至贱田,卻和暖如春缅茉,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背男摧。 一陣腳步聲響...
    開封第一講書人閱讀 32,123評(píng)論 1 267
  • 我被黑心中介騙來泰國打工蔬墩, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留译打,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,641評(píng)論 2 362
  • 正文 我出身青樓筹我,卻偏偏與公主長得像扶平,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子蔬蕊,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,728評(píng)論 2 351

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

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