国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Android Studio實(shí)現(xiàn)文件管理器

這篇具有很好參考價(jià)值的文章主要介紹了Android Studio實(shí)現(xiàn)文件管理器。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

一、項(xiàng)目概述

本次帶來的文件管理器,能夠?qū)D卡的目錄進(jìn)行管理。主要功能包括新建文件(夾)、查看文件(夾)、搜索文件(夾)、刪除文件(夾)、回到根目錄。涉及知識(shí)點(diǎn)包括動(dòng)態(tài)申請權(quán)限、自定義Dialog、自定義菜單、文件系統(tǒng)操作、適配器等。

二、開發(fā)環(huán)境

開發(fā)環(huán)境依舊是在Android Studio4.2.1,只要你的AS是近兩年從官網(wǎng)下載的,都是可以滿足的。日期版本是比4.2.1高的。
android 文件管理開發(fā),Android項(xiàng)目,android studio,android,java,安卓,安卓app

三、詳細(xì)設(shè)計(jì)

1、布局設(shè)計(jì)

我們先看下主頁面的布局:父標(biāo)簽是RelativeLayout,相對布局用來布置位置是最適合的。最上方使用Toolbar替代原生的ActionBar,在替代前需要在theme中將主題設(shè)置為Theme.MaterialComponents.Light.NoActionBar,在MainActivity中加上代碼:

  // 綁定并設(shè)置工具欄
  Toolbar toolbar = findViewById(R.id.toolbar);
  setSupportActionBar(toolbar);

然后放一個(gè)TextView顯示文件路徑,接著是最常用的ListView顯示文件列表,最后是一個(gè)父標(biāo)簽為LinearLayout的布局,里面描繪了一個(gè)搜索框。
android 文件管理開發(fā),Android項(xiàng)目,android studio,android,java,安卓,安卓app

我們再看下自定義對話框的布局,應(yīng)該一目了然,就是讓用戶輸入文件名稱,然后新建文件。
android 文件管理開發(fā),Android項(xiàng)目,android studio,android,java,安卓,安卓app

2、程序運(yùn)行時(shí)申請權(quán)限

Android6.0以后需要在運(yùn)行時(shí)申請讀寫外部存儲(chǔ)的權(quán)限(危險(xiǎn)權(quán)限)。首先在AndroidManifest.xml中加入我們需要的權(quán)限。

    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

運(yùn)行時(shí)權(quán)限的核心在于程序運(yùn)行過程中由用戶授權(quán)我們?nèi)?zhí)行某些危險(xiǎn)操作,程序是不可以擅自做主去執(zhí)行這些危險(xiǎn)操作的。因此,第一步就是先判斷用戶是不是已經(jīng)給過我們授權(quán)了,借助的是ContextCompat.checkSelfPermission()方法。checkSelfPermission()方法接收兩個(gè)參數(shù),第一個(gè)參數(shù)是Context,也就是上下文,第二個(gè)參數(shù)是具體的權(quán)限名,比如讀外存的權(quán)限名就是Manifest.permission.READ_EXTERNAL_STORAGE,然后我們使用方法的返回值和PackageManager.PERMISSION_GRANTED做比較,相等就說明用戶已經(jīng)授權(quán),不等就表示用戶沒有授權(quán)。

如果已經(jīng)授權(quán)的話就簡單了,直接去執(zhí)行查看文件的邏輯操作就可以了,我們把這部分操作封裝到了initFile()方法當(dāng)中。如果沒有授權(quán)的話,則需要調(diào)用ActivityCompat.requestPermissions()方法來向用戶申請權(quán)授權(quán),requestPermissions()方法接收3個(gè)參數(shù),第一個(gè)參數(shù)是Activity實(shí)例,第二個(gè)參數(shù)是一個(gè)String數(shù)組,第三個(gè)參數(shù)是請求碼,只要是唯一值就可以了,這里傳入了1。

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        int myPermission = ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.READ_EXTERNAL_STORAGE);
        if (myPermission != PackageManager.PERMISSION_GRANTED) {
            Toast.makeText(this, "請求讀取SD卡權(quán)限", Toast.LENGTH_SHORT).show();
            // 動(dòng)態(tài)申請權(quán)限,請求碼為1
            ActivityCompat.requestPermissions(MainActivity.this, new String[] {Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1);
        } else {
            initFile();
        }
    }
    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        switch (requestCode) {
            case 1:
                if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                    // 同意權(quán)限則初始化文件列表
                    initFile();
                } else {
                    // 拒絕權(quán)限
                    Toast.makeText(this, "你拒絕了讀寫SD卡權(quán)限", Toast.LENGTH_SHORT).show();
                    // 退出應(yīng)用
                    finish();
                }
                break;
            default:
                break;
        }
    }

3、查看文件

當(dāng)用戶同意權(quán)限之后,先判斷手機(jī)中是否裝載了sd卡,如果有sd卡則獲取SD卡的根目錄,設(shè)置當(dāng)前父目錄為root,獲取當(dāng)前目錄下的所有文件。然后for循環(huán)獲取所有的文件的鍵值對,添加到列表中,再創(chuàng)建和設(shè)置適配器。就大功告成了。

    private void initFile() {
        // 判斷手機(jī)中是否裝載了sd卡
        boolean isLoadSDCard = Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED);
        if (isLoadSDCard) {
            // 獲取SD卡的根目錄
            root = Environment.getExternalStorageDirectory();
            // 當(dāng)前父目錄為root
            currentParent = root;
            // 獲取當(dāng)前目錄的所有文件
            currentFiles = currentParent.listFiles();
            // 加載列表
            inflatelv(currentFiles);
        } else {
            Toast.makeText(this, "SD卡沒有被裝載", Toast.LENGTH_SHORT).show();
        }
        // 設(shè)置列表子項(xiàng)監(jiān)聽器
        setListener();
    }

4、刪除文件

對于文件夾而言,需要先刪除目錄下所有文件,然后刪除當(dāng)前文件夾;對于文件而言,直接刪除當(dāng)前文件。使用deleteFile()進(jìn)行文件刪除,接收參數(shù)為文件對象。在刪除之后需要重新設(shè)置適配器。

   // 如果是文件夾先刪除目錄下所有文件
   if (!currentFiles[i].isFile()) {
       File[] files = currentFiles[i].listFiles();
       for (int index = 0; index < files.length; index++) {
           deleteFile(files[index].getName());
       }
   }
   // 刪除當(dāng)前文件(夾)
   if (currentFiles[i].delete()) {
       Toast.makeText(view.getContext(), "刪除成功", Toast.LENGTH_SHORT).show();
       currentFiles = currentParent.listFiles();
       // 數(shù)據(jù)源發(fā)生改變,重新設(shè)置適配器內(nèi)容
       inflatelv(currentFiles);
   }

5、搜索文件

搜索的原理很簡單,就是關(guān)鍵詞篩選,contains()方法判斷是否包含關(guān)鍵詞,將for循環(huán)得到的列表中每一個(gè)文件對象都放入File數(shù)組中,再重新設(shè)置適配器。

 // 搜索按鈕進(jìn)行數(shù)據(jù)篩選,顯示關(guān)鍵詞數(shù)據(jù)源
 ivSearch.setOnClickListener(new View.OnClickListener() {
     @Override
     public void onClick(View view) {
         String searchName = etSearch.getText().toString().trim();
         List<File> tempFiles = new ArrayList<>();
         for (int i = 0; i < currentFiles.length; i++) {
             if (currentFiles[i].getName().contains(searchName))
                 tempFiles.add(currentFiles[i]);
         }
         File[] files = new File[tempFiles.size()];
         for (int i = 0; i < tempFiles.size(); i++) {
             files[i] = tempFiles.get(i);
         }
         inflatelv(files);
     }
 });

6、新建文件

file.createNewFile()方法用來新建文件,file就是準(zhǔn)備新建的文件對象;mkdir()方法用來創(chuàng)建文件夾,file就是準(zhǔn)備新建的文件夾對象。調(diào)用File的構(gòu)造方法,傳入?yún)?shù)為文件路徑。

   // 創(chuàng)建個(gè)新文件對象,參數(shù)為文件路徑
   File file = new File(currentParent.getAbsolutePath() + "/" + filename);
   // 創(chuàng)建新文件夾
   file.mkdir();
   newBuildRefresh();
   alertDialog.dismiss();

四、運(yùn)行演示

1、啟動(dòng)模擬器,運(yùn)行app,進(jìn)入應(yīng)用首先會(huì)申請?jiān)L問SD卡權(quán)限,如果拒絕將無法使用應(yīng)用,選擇允許進(jìn)入應(yīng)用。
android 文件管理開發(fā),Android項(xiàng)目,android studio,android,java,安卓,安卓app

2、可以看到屏幕中間顯示SD卡的所有目錄,當(dāng)前路徑為/storage/emulated/0。頂部工具欄左側(cè)是應(yīng)用名稱,右側(cè)是功能鍵,分別是返回上級(jí)菜單、返回根目錄、新建目錄;底部是搜索欄。
android 文件管理開發(fā),Android項(xiàng)目,android studio,android,java,安卓,安卓app

3、單擊子項(xiàng),如果是文件將提示“無法打開文件”;如果是文件夾:為空提示“文件夾為空”,不為空則進(jìn)入下一級(jí)目錄。這里我們進(jìn)入了Picture目錄。
android 文件管理開發(fā),Android項(xiàng)目,android studio,android,java,安卓,安卓app

4、長按子項(xiàng),彈出對話框,點(diǎn)擊確定即可刪除文件或文件夾。
android 文件管理開發(fā),Android項(xiàng)目,android studio,android,java,安卓,安卓app

5、點(diǎn)擊新建按鈕,下拉菜單選擇文件,輸入文件名稱,點(diǎn)擊新建按鈕,如果文件名重復(fù)會(huì)提示,不重復(fù)即可新建成功。
android 文件管理開發(fā),Android項(xiàng)目,android studio,android,java,安卓,安卓app
android 文件管理開發(fā),Android項(xiàng)目,android studio,android,java,安卓,安卓app

6、在搜索框輸入test,點(diǎn)擊搜索按鈕,出現(xiàn)搜索結(jié)果。
android 文件管理開發(fā),Android項(xiàng)目,android studio,android,java,安卓,安卓app

7、點(diǎn)擊搜索框的關(guān)閉按鈕,清空搜索結(jié)果,顯示原先的目錄。
android 文件管理開發(fā),Android項(xiàng)目,android studio,android,java,安卓,安卓app

8、點(diǎn)擊返回鍵返回到上級(jí)目錄,也可以使用中間的根目錄鍵直接返回根目錄。如果當(dāng)前是根目錄,再次點(diǎn)擊返回鍵就會(huì)退出應(yīng)用。
android 文件管理開發(fā),Android項(xiàng)目,android studio,android,java,安卓,安卓app

五、源碼獲取

關(guān)注公眾號(hào)《萌新加油站》,后臺(tái)回復(fù):文件管理

點(diǎn)此直接下載源碼:??Android Studio實(shí)現(xiàn)文件管理器文章來源地址http://www.zghlxwxcb.cn/news/detail-675970.html


??這有你錯(cuò)過的精彩內(nèi)容??
Android Studio實(shí)現(xiàn)旅游App
Android Studio實(shí)現(xiàn)購物商城
Android Studio實(shí)現(xiàn)選課系統(tǒng)
Android Studio實(shí)現(xiàn)圖書管理系統(tǒng)
Android Stduio實(shí)現(xiàn)外賣訂餐系統(tǒng)

到了這里,關(guān)于Android Studio實(shí)現(xiàn)文件管理器的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 記錄一下,win11,單擊zip文件后文件管理器閃退

    新買的筆記本電腦,正版win11家庭版,壓縮軟件安裝的是winrar,安裝了其他一堆軟件后,發(fā)現(xiàn)文件管理器經(jīng)常莫名閃退。多次嘗試之后,發(fā)現(xiàn)是只要是單擊zip文件后就會(huì)文件管理器閃退,然后恢復(fù)桌面。 1. 百度了“win11 zip 閃退”,出來的解決方案,試了,無果; 2. 必應(yīng)了同

    2024年01月23日
    瀏覽(24)
  • 微信小程序 - wx.getFileSystemManager()文件管理器

    wx.getFileSystemManager() ,微信小程序處理文件的方法,可以獲取全局唯一的文件管理器。它包括的方法有:

    2024年02月10日
    瀏覽(20)
  • 如何用 WampServer+快解析 搭建php文件管理器

    如何用 WampServer+快解析 搭建php文件管理器

    基于網(wǎng)絡(luò),資源是大家最最基本的需求,許多網(wǎng)絡(luò)愛好者不求利益,把自己收集的一些通過一些平臺(tái)共享給大家,這就是資源共享。 資源 共享程度越高, 代表 信息發(fā)展水平越高。 現(xiàn)實(shí)工作中, 由于用戶提供的數(shù)據(jù)可能來自不同的途徑,其數(shù)據(jù)內(nèi)容、數(shù)據(jù)格式和數(shù)據(jù)質(zhì)量

    2024年02月09日
    瀏覽(28)
  • 刪除Win11文件管理器左側(cè)的‘主文件夾‘和‘圖庫‘的鏈接.
  • 【私有云盤】搭建PHP輕量文件管理器 - TinyFileManager「公網(wǎng)遠(yuǎn)程訪問」

    【私有云盤】搭建PHP輕量文件管理器 - TinyFileManager「公網(wǎng)遠(yuǎn)程訪問」

    文件共享和查閱是現(xiàn)在網(wǎng)絡(luò)最常見的應(yīng)用場景,因此也產(chǎn)生了海量的應(yīng)用,這些應(yīng)用的功能都差不多,但是安裝和部署的過程卻差異巨大。不過對于使用者來說,能以最簡單的安裝過程實(shí)現(xiàn)最全面的文件上傳下載功能,才是最符合需求的。今天,筆者就為大家介紹一款只有兩

    2023年04月09日
    瀏覽(22)
  • Manjaro linux 安裝svn 并在文件管理器里顯示相關(guān)圖標(biāo)

    Manjaro linux 安裝svn 并在文件管理器里顯示相關(guān)圖標(biāo)

    需要先安裝svn linux版打開終端執(zhí)行 安裝完成后執(zhí)行一下 出現(xiàn)這個(gè)就說明svn已經(jīng)安裝完成了,這個(gè)時(shí)候我們可以執(zhí)行 ? 就可以檢出svn服務(wù)器上相關(guān)內(nèi)容了 但是這個(gè)有的時(shí)候我們打開文件管理器想要看到被svn或者被git托管的文件的狀態(tài)能顯示出來,就不用我們敲命令行來看哪些

    2024年02月06日
    瀏覽(36)
  • 【ubuntu22.04 文件管理器nautilus配置默認(rèn)終端為alacritty】

    【ubuntu22.04 文件管理器nautilus配置默認(rèn)終端為alacritty】

    ubuntu默認(rèn)的終端不能通過設(shè)置里的默認(rèn)應(yīng)用程序配置 nautilus是ubuntu自帶的文件管理器,包管理器里面只有 nautilus-extension-gnome-terminal 而沒有提供大多終端 update-alternatives 工具可以修改系統(tǒng)的默認(rèn)終端( ctrl-alt-t ),但對nautilus文件管理器內(nèi)失效 寄出神器nautilus-open-any-terminal,支持

    2024年02月09日
    瀏覽(52)
  • 個(gè)人云存儲(chǔ):使用Cpolar和極簡主義文件管理器構(gòu)建的公網(wǎng)訪問平臺(tái)

    個(gè)人云存儲(chǔ):使用Cpolar和極簡主義文件管理器構(gòu)建的公網(wǎng)訪問平臺(tái)

    文件共享和查閱是現(xiàn)在網(wǎng)絡(luò)最常見的應(yīng)用場景,因此也產(chǎn)生了海量的應(yīng)用,這些應(yīng)用的功能都差不多,但是安裝和部署的過程卻差異巨大。不過對于使用者來說,能以最簡單的安裝過程實(shí)現(xiàn)最全面的文件上傳下載功能,才是最符合需求的。今天,筆者就為大家介紹一款只有兩

    2024年02月09日
    瀏覽(25)
  • 基于php應(yīng)用的文件管理器eXtplorer部署網(wǎng)站并內(nèi)網(wǎng)穿透遠(yuǎn)程訪問

    基于php應(yīng)用的文件管理器eXtplorer部署網(wǎng)站并內(nèi)網(wǎng)穿透遠(yuǎn)程訪問

    通過互聯(lián)網(wǎng)傳輸文件,是互聯(lián)網(wǎng)最重要的應(yīng)用之一,無論是網(wǎng)上觀看的視頻、圖片、小說,甚至協(xié)同辦公和商業(yè)文件傳遞,都是這項(xiàng)應(yīng)用的延伸。而之前火熱一時(shí)的云存儲(chǔ)概念,就數(shù)據(jù)存儲(chǔ)服務(wù)器加互聯(lián)網(wǎng)傳輸形成的。不過,云存儲(chǔ)接連爆出事故,讓公有云存儲(chǔ)服務(wù)備受質(zhì)疑

    2024年02月02日
    瀏覽(40)
  • Net2FTP搭建免費(fèi)web文件管理器『打造個(gè)人網(wǎng)盤』

    Net2FTP搭建免費(fèi)web文件管理器『打造個(gè)人網(wǎng)盤』

    ??wei_shuo的個(gè)人主頁 ??wei_shuo的學(xué)習(xí)社區(qū) ??Hello World ! 文件傳輸可以說是互聯(lián)網(wǎng)最主要的應(yīng)用之一,特別是智能設(shè)備的大面積使用,無論是個(gè)人存儲(chǔ)文件資料,還是商業(yè)文件流轉(zhuǎn),都有數(shù)據(jù)存儲(chǔ)和傳輸?shù)男枨蟆S行枨缶陀惺袌?,相?yīng)的傳輸軟件層出不窮,而這些軟件也各有

    2023年04月15日
    瀏覽(21)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包