Android 编译笔记20191205

gradle下载很慢

解决问题的方法如下:
使用文件管理器 打开用户主目录

windows平台: c:Users用户名.gradle

macos平台: /Users/用户名/.gradle

linux平台: /home/用户名/.gradle

找到./gradle/wrapper/dist/ 目录

找到对应的gradle-版本好-all的文件夹,进入到里面,如下图:

去官方网站下载这个版本号对应的安装包 https://services.gradle.org/distributions/

把下载下来的zip压缩文件 放到对应版本的子目录名里面 (目录名由字母和数字组成)

images/191213/fs2019121300002R.jpg
将压缩文件放入这个目录,我解压了一下,好像没有影响编译。

android 项目下载依赖jar包慢

解决:

build.gradle 文件中添加国内镜像

repositories {
        maven{ url 'https://maven.aliyun.com/repository/public/'}
        jcenter()
        //maven {url 'https://jitpack.io'}
        //maven {url 'https://maven.google.com'}
    }

References

Android videoview

播放网络视频

AndroidMainfest.xml 新增网络的访问权限

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

在布局中添加

 <VideoView
               android:id="@+id/video_preview"
               android:layout_width="match_parent"
               android:layout_height="match_parent"
               android:layout_gravity="center" />
//引入包
import android.widget.VideoView;
import android.widget.MediaController;
import android.net.Uri;

//原生的videoview和控制
private VideoView mVideoView;
private MediaController mMediaController;


mVideoView = findViewById(R.id.video_preview);
mMediaController = new MediaController(MainActivity.this);

//将路径转换成uri
Uri uri = Uri.parse(videoUrl);
mVideoView.setVideoURI(uri);
mVideoView.setMediaController(mMediaController);
mVideoView.getBufferPercentage();
mVideoView.seekTo(0);
mVideoView.requestFocus();

References

Android 下载网络的mp4文件

AndroidMainfest.xml 新增文件写入的权限

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

代码记录:

import java.io.File;
import java.io.FileOutputStream;
import java.io.BufferedInputStream;
import java.text.SimpleDateFormat;
import java.util.Date;
import android.os.Environment;
import java.net.URL;
import java.net.HttpURLConnection;
import java.io.IOException;
import java.io.InputStream;
import android.content.Intent;
import android.app.ProgressDialog;

//使用
final ProgressDialog pd;
pd = new ProgressDialog(MainActivity.this);
pd.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
pd.setMessage("下载中...");
pd.setCanceledOnTouchOutside(false);
pd.show();
new Thread() {
    @Override
    public void run() {
        try {
            File file = getFileFromServer('http://www.example.com/example.mp4', pd);
            sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.parse("file://" + file)));

            sleep(1000);
            pd.dismiss(); // 结束掉进度条对话框
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}.start();
                    

/**
     * 将MP4文件存入到 应用的路径 files下
     * 固定是: Android/data/你的包名/files
     * @param path
     * @param pd
     * @return
     * @throws Exception
     */
public  File getFileFromServer(String path, ProgressDialog pd) throws Exception {
        // 如果相等的话表示当前的sdcard挂载在手机上并且是可用的
        if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
            String path3 = getExternalFilesDir(null).getPath();
            File mediaStorageDir = new File(path3);
            if (!mediaStorageDir.exists()) {
                if (!mediaStorageDir.mkdirs()) {
                    showPromptToast("文件夹创建失败"+path3);
                    return null;
                }
            }

            URL url = new URL(path);
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            conn.setConnectTimeout(5000);
            // 获取到文件的大小
            pd.setMax(conn.getContentLength());
            InputStream is = conn.getInputStream();
            if (!mediaStorageDir.exists()) {
                mediaStorageDir.mkdir();
            }
            // 文件根据当前的毫秒数给自己命名
            SimpleDateFormat myFmt = new SimpleDateFormat("yyyyMMddHHmmss");
            Date now = new Date();
            String videoFileName = "D" + myFmt.format(now);
            String suffix = ".mp4";
            File file = new File(mediaStorageDir + File.separator + videoFileName + suffix);
            FileOutputStream fos = new FileOutputStream(file);
            BufferedInputStream bis = new BufferedInputStream(is);
            byte[] buffer = new byte[1024];
            int len;
            int total = 0;
            while ((len = bis.read(buffer)) != -1) {
                fos.write(buffer, 0, len);
                total += len;
                // 获取当前下载量
                pd.setProgress(total);
            }
            fos.close();
            bis.close();
            is.close();
            return file;
        } else {
            return null;
        }
    }
    

References

edittext focus

1.在布局文件中给edittext的父控件增加两个属性(我编写代码时,没有给Edittext添加这2个属性)
android:focusable="true"
android:focusableInTouchMode="true"

2.直接调用edittext的clearFocus()方法,不过该方法有时候会不生效

//searchView.setFocusable(true);
//searchView.setFocusableInTouchMode(true);
//searchView.requestFocus();
searchView.clearFocus();//失去焦点
//searchView.requestFocus();//获取焦点

References

原文地址:https://www.cnblogs.com/fsong/p/12036672.html