精华内容
下载资源
问答
  • ▲ 微信扫描二维码关注说到Android,就不得不提它的开放...本期要给大家推荐的就是基于文件管理特性的APP——ES文件浏览器。谈到ES,Android的老用户都不会陌生,它是一款功能强大且免费的本地和网络文件管理器,主...

    1db8be6867c903e871a23c050836c3de.png

    ▲ 微信扫描二维码关注

    c1500c13c20d8830da5c6bebcbd937d6.gif

    说到Android,就不得不提它的开放性,这也是我们能够自由地选择第三方应用市场和修改版APP的前提,当然,它的开放性也不止如此,用户还可以对存储器中的文件进行管理,更是让Android的实用性上升了一个层级。

    本期要给大家推荐的就是基于文件管理特性的APP——ES文件浏览器

    bbe66e0d3008a51394c0d894216c56d3.gif

    谈到ES,Android的老用户都不会陌生,它是一款功能强大且免费的本地和网络文件管理器,主要功能有:本地文件管理、文件编辑、FTP、局域网、网盘管理、简单视频剪辑,还支持root授权后管理系统文件且能对文件的权限进行操作。

    但是目前的ES文件浏览器国内代理权被国内某家公司获得,为了快速盈利改变了其销售模式,他们在APP中内置了广告,回复文末的关键字可以就获得无广告的修改版哦。

    这款APP有的点我就不多说了,主要是来介绍一下它的常用功能

    打开主界面如下图所示,文件分析器可以对内部存储的文件进行分析并分类,方便你找到那些隐藏在深处的垃圾文件,当然没有一定的经验建议大家不要尝试。

    d09f0f6e893313809736731fc1711cac.png

    从右往左滑动可以进入到内部存储的管理界面,点击右下角的视图按钮,可以对文件视图进行自定义

    81303a8ee87d59f6852d4e7ee0a9e581.png

    还可以根据自己的喜好对文件进行排序,名称类型大小修改时间,正序倒序皆可。

    c32e207a2ac3349a191354604861fa70.png

    a8f4cb2b744b47dd38a9231a7f17af70.png

    选中一个文件或文件夹时,点击右下角的更多按钮,可以显示更多的操作,例如使用其自带的局域网文件传输功能发送文件,使用系统分享接口将文件分享给他人,投射到客厅的电视,将文件夹和应用关联,

    将文件夹置顶,查看属性等。

    aeca09a7e34bbd316d2f830ab40efcd8.png

    16d4b3795483a59d75a18512cb28e3b5.gif

    公众号回复ES文件浏览器获取下载链接

    (红字是关键词哦)

    01130cf7f5ef97815aab879926968bf7.gif看完别走,点个在看呀!
    展开全文
  • Android文件管理器源代码介绍:以下是对文件管理器android源代码程序功能介绍如下: 功能说明:图片预览 图标异步加载 双击拖曳改为搜索键拖曳 添加intent动作可以获取文件名 (在设置
  • ES文件浏览器安卓版是一款功能强大且操作十分简便的手机文件管理软件,ES文件浏览器安卓版功能全面可以支持多种视图列表和排序方式,查看并打开各类文件,在本地SD卡、局域网、OTG设备之间任意传输文件,多选、复制...

    c327548f8cccf9fa6e3bdb0f57897d76.png      ES文件浏览器安卓版是一款功能强大且操作十分简便的手机文件管理软件,ES文件浏览器安卓版功能全面可以支持多种视图列表和排序方式,查看并打开各类文件,在本地SD卡、局域网、OTG设备之间任意传输文件,多选、复制、粘帖、剪贴板、查看属性、解压、重命、置顶等。

    功能介绍

          原生中文支持,千万用户首选文件管理器!如今超过8000万下载!eS文件浏览器( ES File Explorer)是一个功能强大的免费的本地和网络文件管理器和应用程序管理器。

          想更好地管理你的手机和平板?

          原生中文支持,全球数千万用户一致选择的最强安卓文件管理器!

          点击就可以播放音乐,点击就可以播放视频

          点击就可以查看图片,点击就可以阅读文档

          点击就可以安装应用,点击就可以查看压缩

          点击就可以进行搜索,点击就可以更改视图

    软件特色

          快捷的工具栏操作

          管理手机及局域网计算机上的文件

          在本地和网络中搜索和查看文件

          安装/卸载/备份程序

          压缩/解压

          多选/缩略图/多种视图

          流媒体方式播放保存在计算机、网络上的音乐、电影

          蓝牙

          支持root

          支持多种网络存储,酷盘,dropbox,免费空间,应有尽有3

          SD卡文件管理器,进行各种文件操作、多种文件视图选项

          多选和功能更强的剪贴板功能,搜索功能

          程序管理器,安装、备份、卸载、快捷方式

          进程管理器

          安全管理器

          访问局域网计算机、FTP和蓝牙上的文件,可以在计算机和手机进行无缝的文件操作

          本地、共享、FTP、蓝牙查看、打开多媒体文件,内置文本编辑器

          书签、桌面快捷方式

    软件特色

          1、管理手机以及电脑上的文件

          2、安装、卸载备份应用程序

          3、压缩解压啊

          4、支持root

          5、进程管理器

          6、安全管理器

          7、书签、桌面快捷方式

          8、磁盘分析

          9、本地、共享、FTP、蓝牙查看、打开多媒体文件,内置文本编辑器

          10、多选/缩略图/多种视图

    FAQ

          Q: 外置卡操作失败?

          A: 此问题是由于谷歌从系统开始对第三方应用写外置卡权限进行了修改。

          我们已经在与谷歌联系。目前解决方法如下:

          首先,为手机获得ROOT权限:您可以下载安装es工具箱中的root软件,也可以登录 点击λ下载并安装。

          然后,写外置卡了。将ES文件浏览器的安装包放在 /system/priv-app中,再安装,这样就可以用ES写外置卡了。

          另外,将系统升级到安卓就可以

          Q: 为什么有的关联应用图标不显示?

          A: 因为这些图标来自软件数据库,数据库会进一步完善,这样就可以显示更多的软件图标了。

          您也可以手动标记图标,长按文件夹—更多—关联应用图标—选择确定。

          Q: 如何播放ES不支持的媒体格式?

          A: ES目前使用的是系统解码器,支持的格式和系统保持一致,如果不能用ES播放,您可以尝试使用第三方播放器。

          Q: 文件加密后忘记密码怎么办?

          A: 文件加密忘记密码的话,我们也没有办法解开。如果可以随意找到密码,这就成了功能漏洞。目前您只能不断尝试去解开密码。

    安装步骤

          1、在手机软件下载软件中搜索es文件浏览器

          2、点击ES文件浏览器进行下载,如图:

    e401281618330248b5a4e3e658b939c8.png

          3、下载完成之后点击安装软件,如图:

    1a495e9b0773c2cdc61b452e6a7fbb46.png

    使用技巧

          1、找到软件运行它。

          2、ES会自动定位到存储卡根目录。

          3、文件及文件夹图标显示不一样,很容易区分,使用起来就像Windows的资源管理器一样。

          4、在任意文件上点击保持(点下去不动),软件会弹出菜单,类似于在文件上右键弹出菜效果。可以选择的操作很多,向下滑动查看更多选项!

          5、可以查看文件详细属性。

          6、我们还可以按“Menu菜单键”调出更多功能选项。

          7、ES还可以卸载软件,用户可查看到所以安装在设备上的应用程序,长按住一款应用程序,用户可以对看到弹出的菜单中有卸载的功能,当然还可以对该软件进行备份或设置快捷方式等。

    4e34ab27a2a14b4dea348e5a94672b52.png
    展开全文
  • Unity调用安卓文件管理器AndriodStudioAndriodStudio项目和模块创建创建和编辑FileBrowserActivitybuild.gradle的设置app下的build.gradle的设置FileBrowserLibrary模块下的build.gradle的设置打JAR包Unity ...

    AndriodStudio

    我使用的是AndriodStudio4.1.1版本

    AndriodStudio项目和模块创建

    创建名为FileBrowser的项目
    创建项目1
    创建项目2

    将目录调到项目层
    项目层
    创建名为FileBrowserLibrary的模块;

    创建模块

    创建和编辑FileBrowserActivity

    创建FileBrowserActivity
    在这里插入图片描述
    FileBrowserActivity 完整代码:

    build.gradle的设置

    app下的build.gradle的设置

    app-build.gradle
    完整代码:

    plugins {
        id 'com.android.application'
    }
    
    android {
        compileSdkVersion 29
        buildToolsVersion "29.0.3"
    
        defaultConfig {
            applicationId "com.example.filebrowser"
            minSdkVersion 23
            targetSdkVersion 29
            versionCode 1
            versionName "1.0"
    
            testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
        }
    
        buildTypes {
            release {
                minifyEnabled false
                proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
            }
        }
        compileOptions {
            sourceCompatibility JavaVersion.VERSION_1_7
            targetCompatibility JavaVersion.VERSION_1_7
        }
    }
    
    dependencies {
    
        implementation fileTree(dir: 'libs', include: ['*.jar'])
        implementation project(':filebrowserlibrary')
    
        implementation 'androidx.appcompat:appcompat:1.1.0'
        implementation 'com.google.android.material:material:1.1.0'
        implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
        testImplementation 'junit:junit:4.+'
        androidTestImplementation 'androidx.test.ext:junit:1.1.1'
        androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
    }
    

    FileBrowserLibrary模块下的build.gradle的设置

    在这里插入图片描述

    完整代码:

    plugins {
        id 'com.android.library'
    }
    
    android {
        compileSdkVersion 29
        buildToolsVersion "29.0.3"
    
        defaultConfig {
            minSdkVersion 23
            targetSdkVersion 29
            versionCode 1
            versionName "1.0"
    
            testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
            consumerProguardFiles "consumer-rules.pro"
        }
    
        buildTypes {
            release {
                minifyEnabled false
                proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
            }
        }
        compileOptions {
            sourceCompatibility JavaVersion.VERSION_1_7
            targetCompatibility JavaVersion.VERSION_1_7
        }
    }
    
    dependencies {
    
        implementation 'androidx.appcompat:appcompat:1.1.0'
        implementation 'com.google.android.material:material:1.1.0'
        implementation files('..\\app\\libs\\classes.jar')
        testImplementation 'junit:junit:4.+'
        androidTestImplementation 'androidx.test.ext:junit:1.1.1'
        androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
    }
    
    //Copy类型
    task makeJar(type: Copy) {
        delete 'build/libs/FileBrowser.jar'
        from('build/intermediates/aar_main_jar/release')
        into('build/libs/')
        include('classes.jar')
        rename ('classes.jar', 'FileBrowser.jar')
    }
    makeJar.dependsOn(build)
    

    打JAR包

    在左下角点开"Terminal",输入命令“make Jar”,回车执行,等待打包完成。

    Unity

    直接上代码:

       //发送文件
            void ClickButton_SendFile()
            {
    
    #if UNITY_EDITOR
                Debug.LogError("开始调用手机本地文件管理器!");
    #endif
    
    #if UNITY_ANDROID
                try
                {
                    AndroidJavaObject activity = new AndroidJavaClass("com.unity3d.player.UnityPlayer").GetStatic<AndroidJavaObject>("currentActivity");
                    //初始化设置安卓的回调
                    androidClass_showFileChooser.Call("showFileChooser", activity, new SDK_FileBrowser_CallbackListener());
    
                }
                catch (Exception ex)
                {
                    Debug.LogError(ex.Message + " " + ex.Source + " " + ex.StackTrace);
                }
     
    #endif
            }
            //安卓接口实现 -- 选择文件完成
            class SDK_FileBrowser_CallbackListener : AndroidJavaProxy
            {
                // 这句话很重要!!!C#找到Jar中接口的引用
                public SDK_FileBrowser_CallbackListener() : base("com.example.shortmessagelibrary.IOnReceiveMessage") { }
    
                public void OnSelectedFile(String path)
                {
    #if UNITY_EDITOR
                    Debug.LogError(" -- 选择了文件: " + path);
    #endif
                }
            }
    
    展开全文
  • DroidFix安卓App热补丁动态修复技术.zip,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
  • 安卓 文件管理器-ListView实现

    千次阅读 2016-06-16 21:51:19
    现在21:46,加班快要结束了,没办法,零碎的事情太多了。客户也是这边那边都在催,这边说APP有问题要...今天复习一下ListView实现安卓文件管理器,包括文件的筛选、apk的安装,以及BaseAdapter的应用等。 直接上代码

    今天复习一下ListView实现安卓文件管理器,包括文件的筛选、apk的安装,以及BaseAdapter的应用等。
    直接上代码:

    • 应用实现部分
    public class MainActivity extends ListActivity {
        private static final String ROOT_PATH = "/storage/sdcard1/tencent"; // 存储文件名称
        private ArrayList<String> names = null; // 存储文件路径
        private ArrayList<String> paths = null;
        private ArrayList<String> states = null;
        private View view;
        private EditText editText;
        private String[] menu;
        String packageName = null;
        String className = null;
    
        /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main); // 显示文件列表
            showFileDir(ROOT_PATH);
        }
    
        private void showFileDir(String path) {
            names = new ArrayList<String>();
            paths = new ArrayList<String>();
            states = new ArrayList<String>();
            File file = new File(path);
            File[] files = file.listFiles();
            if (!ROOT_PATH.equals(path)) {// 如果当前目录不是根目录
                names.add("@1");
                paths.add(ROOT_PATH);
                states.add("");
                names.add("@2");
                paths.add(file.getParent());
                states.add("");
            }
            if(files!=null)
            for (File f : files) {// 添加所有文件
                if (f.getName().indexOf(".apk") > -1) {//此处用来筛选文件,可以专门写一个接口
                    if (ifApkInstall(f)) {
                        states.add(KeyStringConst.APK_HASINSTALL);
                    } else {
                        states.add(KeyStringConst.APK_NOINSTALL);
                    }
                    names.add(f.getName());
                    paths.add(f.getPath());
                } else if (f.isDirectory()) {
                    names.add(f.getName());
                    paths.add(f.getPath());
                    states.add("");
                } else {// 普通文件
                    names.add(f.getName());
                    paths.add(f.getPath());
                    states.add("");
                }
            }
            this.setListAdapter(new MyAdapter(this, names, paths, states));
        }
    
        @Override
        protected void onListItemClick(ListView l, View v, int position, long id) {
            String path = paths.get(position);
            File file = new File(path); // 文件存在并可读
            if (file.exists() && file.canRead()) {
                if (file.isDirectory()) { // 显示子目录及文件
                    showFileDir(path);
                } else { // 处理文件
                    fileHandle(file);
                }
            } else {// 没有权限
                Resources res = getResources();
                new AlertDialog.Builder(this).setTitle("Message")
                        .setMessage(res.getString(R.string.no_permission))
                        .setPositiveButton("OK", new OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialog, int which) {
    
                            }
                        }).show();
            }
            super.onListItemClick(l, v, position, id);
        }
    
        // 对文件进行增删改
        private void fileHandle(final File file) {
            String dialogTitle = "";
            OnClickListener listener = new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    // 打开文件
                    if (which == 0) {
                        if (menu[0].equals(KeyStringConst.OPEN_FILE)) {// 打开文件
                            openFile(file);
                        } else if (menu[0].equals(KeyStringConst.OPEN_APP)) {// 打开应用
                            Intent intent = getPackageManager()
                                    .getLaunchIntentForPackage(packageName);
                            startActivity(intent);
                            finish();
                        } else if (menu[0].equals(KeyStringConst.INSTALL_APK)) {//安装apk
                             Intent intent = new Intent();
                             // 设置目标应用安装包路径
                             intent.setDataAndType(Uri.fromFile(file),
                             "application/vnd.android.package-archive");
                             startActivity(intent);
                        }
                    } else if (which == 1) {
                        // 修改文件名
                        LayoutInflater factory = LayoutInflater
                                .from(MainActivity.this);
                        view = factory.inflate(R.layout.rename_dialog, null);
                        editText = (EditText) view.findViewById(R.id.editText);
                        editText.setText(file.getName());
                        OnClickListener listener2 = new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialog, int which) {
                                // TODO Auto-generated method stub
                                String modifyName = editText.getText().toString();
                                final String fpath = file.getParentFile().getPath();
                                final File newFile = new File(fpath + "/"
                                        + modifyName);
                                if (newFile.exists()) {
                                    // 排除没有修改情况
                                    if (!modifyName.equals(file.getName())) {
                                        new AlertDialog.Builder(MainActivity.this)
                                                .setTitle("注意!")
                                                .setMessage("文件名已存在,是否覆盖?")
                                                .setPositiveButton(
                                                        "确定",
                                                        new DialogInterface.OnClickListener() {
                                                            @Override
                                                            public void onClick(
                                                                    DialogInterface dialog,
                                                                    int which) {
                                                                if (file.renameTo(newFile)) {
                                                                    showFileDir(fpath);
                                                                    displayToast("重命名成功!");
                                                                } else {
                                                                    displayToast("重命名失败!");
                                                                }
                                                            }
                                                        })
                                                .setNegativeButton(
                                                        "取消",
                                                        new DialogInterface.OnClickListener() {
                                                            @Override
                                                            public void onClick(
                                                                    DialogInterface dialog,
                                                                    int which) {
                                                            }
                                                        }).show();
                                    }
                                } else {
                                    if (file.renameTo(newFile)) {
                                        showFileDir(fpath);
                                        displayToast("重命名成功!");
                                    } else {
                                        displayToast("重命名失败!");
                                    }
                                }
                            }
                        };
                        AlertDialog renameDialog = new AlertDialog.Builder(
                                MainActivity.this).create();
                        renameDialog.setView(view);
                        renameDialog.setButton(DialogInterface.BUTTON_POSITIVE,
                                "确定", listener2);
                        renameDialog.setButton(DialogInterface.BUTTON_NEGATIVE,
                                "取消", new DialogInterface.OnClickListener() {
                                    @Override
                                    public void onClick(DialogInterface dialog,
                                            int which) {
                                        // TODO Auto-generated method stub
                                    }
                                });
                        renameDialog.show();
                    } else {
                        // 删除文件
                        new AlertDialog.Builder(MainActivity.this)
                                .setTitle("注意!")
                                .setMessage("确定要删除此文件吗?")
                                .setPositiveButton("确定",
                                        new DialogInterface.OnClickListener() {
                                            @Override
                                            public void onClick(
                                                    DialogInterface dialog,
                                                    int which) {
                                                if (file.delete()) {
                                                    // 更新文件列表
                                                    showFileDir(file.getParent());
                                                    displayToast("删除成功!");
                                                } else {
                                                    displayToast("删除失败!");
                                                }
                                            }
                                        })
                                .setNegativeButton("取消",
                                        new DialogInterface.OnClickListener() {
                                            @Override
                                            public void onClick(
                                                    DialogInterface dialog,
                                                    int which) {
                                            }
                                        }).show();
                    }
                }
            };
            // 选择文件时,弹出增删该操作选项对话框
            menu = new String[3];
            if (file.getName().indexOf(".apk") > -1) {
                if (ifApkInstall(file)) {
                    menu[0] = KeyStringConst.OPEN_APP;
                    menu[1] = KeyStringConst.RENAME_FILE;
                    menu[2] = KeyStringConst.DELETE_FILE;
                    dialogTitle = "该应用已安装,";
                } else {
                    menu[0] = KeyStringConst.INSTALL_APK;
                    menu[1] = KeyStringConst.RENAME_FILE;
                    menu[2] = KeyStringConst.DELETE_FILE;
                    dialogTitle = "该文件为安装包,";
                }
            } else {
                menu[0] = KeyStringConst.OPEN_FILE;
                menu[1] = KeyStringConst.RENAME_FILE;
                menu[2] = KeyStringConst.DELETE_FILE;
                dialogTitle = "普通文件,";
            }
            new AlertDialog.Builder(MainActivity.this)
                    .setTitle(dialogTitle + "请选择您要进行的操作!").setItems(menu, listener)
                    .setPositiveButton("取消", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                        }
                    }).show();
        }
    
        public boolean ifApkInstall(File file) {
            boolean ifApkInstall = false;
            String ppackageName = null;
            ArrayList<AppInfo> appInfos = getAppList();
            PackageManager pm = this.getPackageManager();
            PackageInfo info = pm.getPackageArchiveInfo(file.getAbsolutePath(),
                    PackageManager.GET_ACTIVITIES);
            ApplicationInfo appInfo = null;
            if (info != null) {
                appInfo = info.applicationInfo;
                ppackageName = appInfo.packageName;
                className = appInfo.className;
            }
            for (int i = 0; i < appInfos.size(); i++) {
                if (appInfos.get(i).packagename.equals(ppackageName)) {
                    packageName = appInfos.get(i).packagename;
                    className = appInfos.get(i).classname;
                    ifApkInstall = true;
                    break;
                }
            }
            return ifApkInstall;
        }
    
        /**
         * 获取非系统应用信息列表
         */
        private ArrayList<AppInfo> getAppList() {
            ArrayList<AppInfo> appList = new ArrayList<AppInfo>();
            PackageManager pm = this.getPackageManager();
            // Return a List of all packages that are installed on the device.
            List<PackageInfo> packages = pm.getInstalledPackages(0);
            for (PackageInfo packageInfo : packages) {
                // 判断系统/非系统应用
                // if ((packageInfo.applicationInfo.flags &
                // ApplicationInfo.FLAG_SYSTEM) <= 0) //判断是否为非系统预装的应用程序 ==0是非系统应用
                // {
                AppInfo tmpInfo = new AppInfo();
    
                tmpInfo.appname = packageInfo.applicationInfo.loadLabel(
                        getPackageManager()).toString();
                // The name of this package. From the <manifest> tag's "name"
                // attribute.
                tmpInfo.packagename = packageInfo.applicationInfo.packageName;
                // The version name of this package, as specified by the <manifest>
                // tag's versionName attribute.
                tmpInfo.versionName = packageInfo.versionName;
                // The version number of this package, as specified by the
                // <manifest> tag's versionCode attribute.
                tmpInfo.versionCode = packageInfo.versionCode;
                // Class implementing the Application object. From the "class"
                // attribute.
                tmpInfo.classname = packageInfo.applicationInfo.className;
                // Log.i("MainActivity activities", tmpInfo.activitys.toString());
                // tmpInfo.appicon =
                // packageInfo.applicationInfo.loadIcon(getPackageManager());
                appList.add(tmpInfo);
                // }
            }
            return appList;
        }
    
        protected class AppInfo {
            protected int versionCode = 0; // 名称
            protected String appname = ""; // 包
            protected String packagename = "";
            protected String classname = "";
            protected String versionName = ""; // 图标
        }
    
        // 打开文件
        private void openFile(File file) {
            Intent intent = new Intent();
            intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            intent.setAction(android.content.Intent.ACTION_VIEW);
            String type = getMIMEType(file);
            intent.setDataAndType(Uri.fromFile(file), type);
            startActivity(intent);
        }
    
        // 获取文件mimetype
        private String getMIMEType(File file) {
            String type = "";
            String name = file.getName();
            // 文件扩展名
            String end = name.substring(name.lastIndexOf(".") + 1, name.length())
                    .toLowerCase();
            if (end.equals("m4a") || end.equals("mp3") || end.equals("wav")) {
                type = "audio";
            } else if (end.equals("mp4") || end.equals("3gp")) {
                type = "video";
            } else if (end.equals("jpg") || end.equals("png") || end.equals("jpeg")
                    || end.equals("bmp") || end.equals("gif")) {
                type = "image";
            } else {
                // 如果无法直接打开,跳出列表由用户选择
                type = "*";
            }
            type += "/*";
            return type;
        }
    
        private void displayToast(String message) {
            Toast.makeText(MainActivity.this, message, Toast.LENGTH_SHORT).show();
        }
    }

    <>

    • Adapter实现部分

        这里说一下为什么要用BaseAdapter(抽象类),BaseAdapter的灵活性就在于它要重写很多方法。只要实现了对一个控件(如本文中的ListView)数据的适配,那其它的只需要稍作修改就可以用到别如GridView等上:
        1.BaseAdapter也是Android应用程序中经常用到的基础数据适配器,它的主要用途是将一组数据传到像ListView、Spinner、Gallery及GridView等UI显示组件,它是继承自接口类Adapter,自定义Adapter子类,就需要实现上面几个方法,其中最重要的是getView()方法,它是将获取数据后的View组件返回,如ListView中每一行里的TextView、Gallery等中的每个ImageView。
        2.Adapter在Android应用程序中起着非常重要的作用,应用也非常广泛,它可看作是数据源和UI组件之间的桥梁,其中Adapter、数据和UI之间的关系,可以用下图表示:

          这里写图片描述
          
        3.Adapter的常用子类,如下图:
        这里写图片描述

        代码如下:

    
    public class MyAdapter extends BaseAdapter {
        private LayoutInflater inflater;
        private Bitmap directory, file;
        // 存储文件名称
        private ArrayList<String> names = null;
        // 存储文件路径
        private ArrayList<String> paths = null;
        // 存储文件路径
        private ArrayList<String> states = null;
    
        // 参数初始化
        public MyAdapter(Context context, ArrayList<String> name,
                ArrayList<String> path, ArrayList<String> state) {
            names = name;
            paths = path;
            states = state;
            directory = BitmapFactory.decodeResource(context.getResources(),
                    R.drawable.directory);
            file = BitmapFactory.decodeResource(context.getResources(),
                    R.drawable.file);
            // 缩小图片
            directory = small(directory, 0.16f);
            file = small(file, 0.1f);
            inflater = LayoutInflater.from(context);
        }
    
    
        @Override
        public int getCount() {
            return names.size();
        }
    
        @Override
        public Object getItem(int position) {
            return names.get(position);
        }
    
        @Override
        public long getItemId(int position) {
            return position;
        }
    
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            ViewHolder holder = null;
            if (null == convertView) {
                convertView = inflater.inflate(R.layout.file, null);
                holder = new ViewHolder();
                holder.text = (TextView) convertView.findViewById(R.id.textView);
                holder.image = (ImageView) convertView.findViewById(R.id.imageView);
                holder.state = (TextView) convertView.findViewById(R.id.stateView);
                convertView.setTag(holder);
            } else {
                holder = (ViewHolder) convertView.getTag();
            }
            File f = new File(paths.get(position).toString());
            if (names.get(position).equals("@1")) {
                holder.text.setText("/");
                holder.image.setImageBitmap(directory);
            } else if (names.get(position).equals("@2")) {
                holder.text.setText("..");
                holder.image.setImageBitmap(directory);
            } else {
                holder.text.setText(f.getName());
                if (f.isDirectory()) {
                    holder.image.setImageBitmap(directory);
                    holder.state.setText(states.get(position));
                } else if (f.isFile()) {
                    holder.image.setImageBitmap(file);
                    holder.state.setText(states.get(position));
                } else {
                    System.out.println(f.getName());
                }
            }
            return convertView;
        }
    
        private class ViewHolder {
            private TextView text;
            private ImageView image;
            private TextView state;
        }
    
        private Bitmap small(Bitmap map, float num) {
            Matrix matrix = new Matrix();
            matrix.postScale(num, num);
            return Bitmap.createBitmap(map, 0, 0, map.getWidth(), map.getHeight(),
                    matrix, true);
        }
    }
    • 界面中文字集合部分

        本应该在xml中编写,但太频繁的通过getString来获取xml文件中的内容其实会慢于直接在JAVA文件中(直接在内存中取String常量,但缺点也很明显,当常量太多的时候,会有不必要数据的加载进内存,且不便于统一字符编码格式,以及国际化):
        
      KeyStringConst.java

    public class KeyStringConst {
        public static final String INSTALL_APK = "安装";
        public static final String UNINSTALL_APK = "卸载";
        public static final String RENAME_FILE = "重命名";
        public static final String DELETE_FILE = "删除文件";
        public static final String OPEN_APP = "打开";
        public static final String OPEN_FILE = "打开文件";
        public static final String APK_HASINSTALL = "hasinstall";
        public static final String APK_NOINSTALL = "notinstall";
        public static final String APK_INSTALLFAILL = "应用安装成功!";
        public static final String APK_INSTALLSUCCESS = "应用安装失败!";
    }
    
    • 主要布局文件部分

    activity_main.xml

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" >
        <ListView android:id="@android:id/list"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
    </LinearLayout> 

    file.xml

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_gravity="center_horizontal|bottom"
        android:orientation="horizontal"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" >
    
        <RelativeLayout android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="bottom"
            >
    
            <ImageView android:id="@+id/imageView"
                android:layout_height="30dip"
                android:layout_width="wrap_content"
                android:layout_marginLeft="20dip">
            </ImageView>
            <TextView android:id="@+id/textView"
                android:layout_width="600dip"
                android:layout_height="30dip"
                android:layout_gravity="bottom"
                android:gravity="bottom"
                android:singleLine="true"
                android:textSize="14sp"
                android:layout_marginLeft="100dip"
                >
            </TextView>
            <TextView android:id="@+id/stateView"
                android:layout_width="60dip"
                android:layout_height="30dip"
                android:textSize="9sp"
                android:layout_gravity="bottom"
                android:gravity="bottom"
                android:singleLine="true"
                android:layout_marginLeft="750dip"
                >
            </TextView>
        </RelativeLayout>
    </LinearLayout>
    

    现在21:46,加班快要结束了,没办法,零碎的事情太多了。客户也是这边那边都在催,这边说APP有问题要改要优化,那边又接了个新的活。

    展开全文
  • 找不到自己想找的照片、担心相册里的照片被别人看到,快来试试《文件管理密码相册工具》APP吧,这款软件可以帮助用户更好地整理相册,对照片和视频进行分类,将每张照片放到恰当的位置。除此之外还可以很好地保护...
  • SMB协议 文件管理APP

    2017-01-05 15:32:46
    运用SMB 协议开发的安卓文件管理APP,可以内网连接共享内容
  • App更新(Android).rar,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
  • app更新,实现service下载.rar,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
  • 员工管理系统、 开发工具:Android Studio 数据库: sqlite 数据库 部分源码 manifest.xml配置文件 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android=...
  • 额,参考了网上的多篇博客,发现,很多都是你抄我,我抄你的那些。。 关键是,这些有的是写一半留一半,有的是有兼容...import android.app.Activity; import android.app.Fragment; import android.content.ContentUr
  • 查看设备上所有app的包名,版本.rar,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
  • 提示:删除系统自带的程序,建议用91手机助手(或者豌豆等等类似的),进入/system/app提前备份  当你发现精简后重新开机出现错误的情况,请自行重建data.img,非必要组件造成的错误可修复 AccountSyncManager....
  • 当在文件管理器里点击某个文件时,会弹出一个打开文件方式的列表,如果需要将自己的App添加到列表中,需要修改App的 Manifest文件。查找了很多资料,写法基本一致,即在Activity中添加一个Intent filter,代码如下:...
  • 文件浏览/管理器是每个安卓手机用户都离不开的APP,但是系统自带的文件管理器一般都很弱,网络功能什么的通通没有,安装第三方文件管理器是必须的。2010年我入手第一部安卓手机MOTO里程碑时用的是XX版Root explorer...
  • 解压缩软件是一款集合了文件管理、文件分类、压缩...安卓zip文件压缩RAR解压手机版介绍一款专业的压缩与解压缩文件管理工具,解压zip可以打开的压缩文件的格式有:Rar , Zip , 7z, bz2 ,bzip2, tab2, taz, gz, gzip...
  • 格式1、在电脑端下载好后,直接把文件(电子书)发到手机上,在手机的“文件管理”中找到该电子书文件,然后复制。2、找到手机自带或下载的电子书APP存储电子书的路径,例如“iReader”APP中的“books”中。3、将复制...
  • 是国内首款原创内容型APP制作软件,互联网 创业必备的一个工具软件,知识管理提升公司软实力,将文件资料制作成手机APP应用,来方便手机随时随地阅读 。图文表格、音频、视频简单三步生成手机APP。今天是一个移动...
  • 启动安卓app检测是否有新版本,有新版本就会弹出是否更新的提示框,自定义的dialog,挺不错的,后台通知栏显示更新进度.rar,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
  • UpdateHelper是一个为了简化Android App的迭代升级开发的Android Library.zip,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
  • Gradle多渠道打包(动态设定App名称,应用图标,背景图片,状态栏颜色.rar,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
  • app设计  基本功能 表单上传 访问本地摄像头拍照 访问本地相册 长传与下载文件 访问webservice http通信post ,get 本地sql数据库存储操作  2,设计 初始页面(九宫格,点击任意...
  • 安卓本身的Log类,是将日志输出到控制台,并不能输出到文件。本文介绍一个简单实用的LogUtils的用法和实现逻辑,可以将Log写出到日志中,给大家做参考。源码在此:log-to-file。 使用该LogUtils类,需要在...
  • 服务端:springmvc,使用maven构建,tomcat运行,放在阿里云服务器上,采用cs架构,具有后台管理界面的功能;...客户端:安卓原生app,用户短信验证码注册登录,人脸识别、注册、采集,图片加载,文件上传等功能。 ...
  • 点击上方“涛哥聊Python”,选择“星标”公众号重磅干货,第一时间送达小北之前买了个iPad,但不习惯苹果的文件管理,自带的实在是太不好用了。于是就想起了安卓手机上用的ES文件浏览器...
  • 安卓app汉化教程

    2019-05-30 18:59:16
    有时候有些软件都是English的,尽管对英语略懂,但是都是看着别扭(我基本都看不懂。)如果每次都点翻译的话又是一个很繁琐的事情。所以我们来一次app汉化的教程首先我们需要一个文件管理器...
  • App更新模块,包含检测更新,更新UI定制,更新进度监听,更新完安装等功能,需依赖网络请求模块.zip,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
  • 文件闪传高级版是一款非常使用的手机电脑文件传输软件,它的主要功能是利用局域网,帮助...文件闪传高级版软件特色打开app,确保手机和电脑在连接同一个wifi,在电脑浏览器输入app上的网址,进入网页管理。可以分...
  • 于是就想起了安卓手机上用的ES文件浏览器,苹果端竟然也有:比自带的文件管理器强多了,甚至还可以使用一些百度网盘会员的功能。话不多说,开整!一、本地文件高效管理用苹果管理文件,一个很别扭的方式就是,不能...

空空如也

空空如也

1 2 3 4 5 ... 19
收藏数 370
精华内容 148
关键字:

安卓文件管理app