Android客制化------开机拷贝文件到内置存储

来源:互联网 发布:公司网络网络架构图 编辑:程序博客网 时间:2024/06/15 05:21

此方法尽量不要拷贝大文件
在Service中进行拷贝动作

package com.xxx.filecopy;import android.app.Service;import android.content.Context;import android.content.Intent;import android.content.SharedPreferences;import android.os.AsyncTask;import android.os.IBinder;import java.io.File;public class CopyService extends Service {    private final Context mContext;    private String srcPath = "/system/extMedia/";    private String dstPath = "/mnt/sdcard/";    public CopyService() {        mContext = CopyService.this;    }    @Override    public void onCreate() {        super.onCreate();        new AsyncTask<Integer, Integer, Integer>() {            @Override            protected Integer doInBackground(Integer... params) {                // TODO Auto-generated method stub                Utils.log("onStart()");                SharedPreferences preference = (CopyService.this).getSharedPreferences("com.xxx.filecopy", MODE_PRIVATE);                boolean alreadyRun = preference.getBoolean("runed", false);                if(!alreadyRun){                    File sdcard = new File("/mnt/sdcard/");                    while(true){                        try{                            Thread.sleep(2000);                        }catch(Exception e){                            Utils.log("sd Can't write, wait 2 secounds");                        }                        // 判断sd卡是否为空且是否可写                        if(null != sdcard && sdcard.canWrite())                            break;                    }                    boolean b = Utils.copyDirectory(srcPath, dstPath);                    if(b){                        Utils.log("Copy successful !");                        Utils.scanFileAsync(mContext,dstPath);                        SharedPreferences.Editor editor = preference.edit();                        editor.putBoolean("runed", true);                        editor.commit();                        //播放视频                        Utils.playmp4(mContext);                    }                }                mContext.stopService(new Intent(mContext, CopyService.class));                return null;            }        }.execute(0);    }    @Override    public IBinder onBind(Intent intent) {        return null;    }}

第一次开机之后启动Service

package com.xxx.filecopy;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.content.SharedPreferences;import android.view.Gravity;import static android.content.Context.MODE_PRIVATE;public class Receiver extends BroadcastReceiver {    private static final String BOOT_COMPLETED = "android.intent.action.BOOT_COMPLETED";    private static final String DONT_TOUCH = "xxx.xxx.donttouch";    private Context mContext;    @Override    public void onReceive(Context context, Intent intent) {        // TODO: This method is called when the BroadcastReceiver is receiving        // an Intent broadcast.        String action = intent.getAction();        mContext = context;        Utils.log("action *****" + action);        SharedPreferences preference = context.getSharedPreferences("com.xxx.filecopy", MODE_PRIVATE);        boolean alreadyRun = preference.getBoolean("runed", false);        if (action.equals(BOOT_COMPLETED))        {            Intent i = new Intent();            i.setClass(context, CopyService.class);            i.setFlags(i.FLAG_ACTIVITY_NEW_TASK);            context.startService(i);            if (alreadyRun){                Utils.log("RE_BOOT_COMPLETED,SO NEED PLAY");                Utils.playmp4(mContext);            }        }else if (action.equals(DONT_TOUCH))        {            if (!Utils.isMusicActive(mContext))            {                Utils.log("Media will play");                Utils.playmp4(mContext);            }        }        String language = locale.getLanguage();        if (language.endsWith("ar"))        {            mNowContent.setGravity(Gravity.RIGHT| Gravity.TOP);        }    }}

工具类

package com.xxx.filecopy;import android.content.Context;import android.content.Intent;import android.media.AudioManager;import android.net.Uri;import android.util.Log;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import static android.content.Intent.FLAG_ACTIVITY_NEW_TASK;/** * Created by xxx on 2017/10/16. */public class Utils {    /***     * 复制文件     * @param src 源文件     * @param des 目标文件     * @return     */    private static boolean copyFile(String src, String des) {        FileInputStream FIS = null;        FileOutputStream FOS = null;        File df = new File(des);        if(df.exists() && df.length() == new File(src).length()){            return true;        }        try {            FIS = new FileInputStream(src);            FOS = new FileOutputStream(des);            byte[] bt = new byte[1024];            int readNum = 0;            while ((readNum = FIS.read(bt)) != -1) {                FOS.write(bt, 0, readNum);            }            return true;        } catch (Exception e) {            e.printStackTrace();            return false;        } finally {            if (FIS!=null)            {                try {                    FIS.close();                } catch (IOException e) {                    e.printStackTrace();                }            }            if (FOS!=null)            {                try {                    FOS.close();                } catch (IOException e) {                    e.printStackTrace();                }            }        }    }    /***     *  播放视频     * @param context     */    public static void playmp4(Context context){        Uri parse = Uri.parse("file:///mnt/sdcard/video_demo.mp4");        Intent play_intent = new Intent(Intent.ACTION_VIEW);        play_intent.setDataAndType(parse,"video/mp4");        play_intent.setFlags(FLAG_ACTIVITY_NEW_TASK);        context.startActivity(play_intent);    }    /***     * 拷贝目录     * @param SrcDirectoryPath     * @param DesDirectoryPath     * @return     */    public static boolean copyDirectory(String SrcDirectoryPath, String DesDirectoryPath) {        log("copyDirectory()" + SrcDirectoryPath + " > " + DesDirectoryPath);        try {            File F0 = new File(DesDirectoryPath);            if (!F0.exists()) {                if (!F0.mkdir()) {                    log("create folder faild");                }            }            File F = new File(SrcDirectoryPath);            File[] allFile = F.listFiles();            int totalNum = allFile.length;            String srcName = "";            String desName = "";            int currentFile = 0;            for (currentFile = 0; currentFile < totalNum; currentFile++) {                log("start copy > " + allFile[currentFile].getAbsolutePath());                if (!allFile[currentFile].isDirectory()) {                    // 如果是文件是采用處理文件的方式                    srcName = allFile[currentFile].toString();                    desName = DesDirectoryPath + "/"                            + allFile[currentFile].getName();                    copyFile(srcName, desName);                }                else {                    if (copyDirectory(                            allFile[currentFile].getPath().toString(),                            DesDirectoryPath + "/"                                    + allFile[currentFile].getName().toString())) {                    } else {                        //log("SubDirectory Copy Error!");                    }                }                //log("end copy > " + allFile[currentFile].getAbsolutePath());            }            return true;        } catch (Exception e) {            //log(e.getMessage());            log("SubDirectory Copy Error!");            e.printStackTrace();            return false;        }    }    /***     * 打印log     * @param msg     */    public static void log(String msg){        android.util.Log.d("xxx", "ALog > " + msg);    }    /***     * 扫面sd卡     * @param ctx     * @param filePath     */    public static void scanFileAsync(Context ctx, String filePath) {        Intent scanIntent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);        scanIntent.setData(Uri.fromFile(new File(filePath)));        ctx.sendBroadcast(scanIntent);    }    /***     * 判断当前系统时候在播放媒体资源     * @param context     * @return     */    public static boolean isMusicActive(Context context) {        final AudioManager audioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);        if (audioManager == null) {            log("isMusicActive(): couldn't get AudioManager reference");            return false;        }        return audioManager.isMusicActive();    }}
原创粉丝点击