標籤:oobe 拷貝檔案 首次開機 android mediatek
MTK平台機器,首次開機會啟動OOBE設定嚮導,我們可以在此應用中增加一個介面,從/system/目錄下拷貝檔案到/mnt/sdcard/目錄下。
1.首先編譯時間要將檔案從代碼路徑拷貝到對應的out目錄,可以用在mk檔案中實現:
方法①:如果檔案較少,可以採用逐條拷貝方式,範例如下:
CUR_PATH := vendor/ThirdParty/App/tchipPRODUCT_COPY_FILES += $(CUR_PATH)/bootanimation.zip:system/media/bootanimation.zip $(CUR_PATH)/multimedia/MP4.mp4:system/media/multimedia/MP4.mp4
方法②:如果檔案結構比較複雜,可採用如下指令碼:
CUR_PATH := vendor/ThirdParty/App/qifeitchip_files := $(shell ls $(CUR_PATH)/multimedia )PRODUCT_COPY_FILES += $(foreach file, $(tchip_files), $(CUR_PATH)/multimedia/$(file):system/media/multimedia/$(file))
2.修改開機嚮導OOBE
mediatek/packages/apps/OOBE/
①在AndroidManifest.xml中添加許可權,並且聲明我們自訂的Activity:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/> <activity android:name=".basic.CopyFiles"></activity>
②編寫Acitivity內容:
package com.mediatek.oobe.basic; import android.app.Activity;import android.content.Intent;import android.net.Uri;import android.os.Bundle;import android.os.Environment;import android.os.Handler;import android.os.Message;import android.util.Log;import android.widget.ProgressBar;import android.widget.Toast; import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import com.mediatek.oobe.R; /** * Created by Alex on 2015/1/12. */public class CopyFiles extends Activity { ProgressBar progressBar; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.copyfiles); progressBar = (ProgressBar) findViewById(R.id.progressBar); //copy(); new Thread(new TimeThread()).start(); //copy(); } final Handler timeHandler = new Handler() { public void handleMessage(Message msg) { switch (msg.what) { case 1: // Toast.makeText(CopyFiles.this, "複製成功", Toast.LENGTH_SHORT).show(); finish(); } super.handleMessage(msg); } }; public class TimeThread implements Runnable { @Override public void run() { try { copy(); //Message message = new Message(); //message.what = 1; //timeHandler.sendMessage(message); } catch (Exception e) { e.printStackTrace(); } } } private void copy() { final String FROMPATH = "/system/media/multimedia"; //final String FROMPATH = "/mnt/sdcard/Test"; final String TOPATH_MUSIC = "/mnt/sdcard/Music"; final String TOPATH_MOVIE = "/mnt/sdcard/Movie"; String[] filename = null; File file = new File(FROMPATH); if (file.exists()) { filename = file.list(); } File filestoreMusic = new File(TOPATH_MUSIC); if (!filestoreMusic.exists()) { filestoreMusic.mkdir(); } File filestoreMovie = new File(TOPATH_MOVIE); if (!filestoreMovie.exists()) { filestoreMovie.mkdir(); } for (int i = 0; i < filename.length; i++) { Log.d("copyFiles", filename[i]); InputStream fosfrom = null; OutputStream fosto; try { fosfrom = new FileInputStream(FROMPATH + "/" + filename[i]); if(i==3) { fosto = new FileOutputStream(TOPATH_MOVIE + "/" + filename[i]); } else { fosto = new FileOutputStream(TOPATH_MUSIC + "/" + filename[i]); } byte bt[] = new byte[1024]; int c; while ((c = fosfrom.read(bt)) > 0) { fosto.write(bt, 0, c); } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } try { fosfrom.close(); } catch (IOException e) { e.printStackTrace(); } progressBar.setProgress(i + 1); if(i== filename.length-1){ Message message = new Message(); message.what = 1; timeHandler.sendMessage(message); } } try { sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file://" + Environment.getExternalStorageDirectory()))); } catch (Exception e) { e.printStackTrace(); } }}
③布局檔案:
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <LinearLayout android:layout_width="fill_parent" android:orientation="vertical" android:gravity="center" android:layout_height="fill_parent"> <ProgressBar style="?android:attr/progressBarStyleHorizontal" android:layout_width="fill_parent" android:layout_height="wrap_content" android:id="@+id/progressBar" android:max="6" android:layout_gravity="center_vertical" /> <TextView android:id="@+id/copyText" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/file_copying" /> </LinearLayout></LinearLayout>
Android首次開機通過設定嚮導拷貝檔案到sdcard目錄下