栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Android系统目录预置media文件

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Android系统目录预置media文件

在处理Android平台的项目时,遇到客户提出的要求预置一个MP4类型的视频文件在系统目录。

经过参考一些文档,处理方案如下:

一、将媒体文件拷贝在out目录

方法类似预置第三方app

Android.mk

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS) 
 
LOCAL_MODULE_TAGS := optional
LOCAL_POST_PROCESS_COMMAND := $(shell mkdir -p $(TARGET_OUT)/media/demo/)
LOCAL_POST_PROCESS_COMMAND := $(shell cp $(LOCAL_PATH)/demo.mp4 $(TARGET_OUT)/media/demo/)

需要拷贝的媒体文件为demo.mp4,预置在system/media/demo/

注意:此时媒体文件还未在系统存储的目录,还需要上层进行一次拷贝动作

二、第一次开机时将该文件拷贝进/storage/emulated/0/Movies

添加权限以及service的注册

--- a/alps/vendor/mediatek/proprietary/packages/providers/MediaProvider/AndroidManifest.xml
+++ b/alps/vendor/mediatek/proprietary/packages/providers/MediaProvider/AndroidManifest.xml
@@ -13,6 +13,7 @@
     
     
     
+          
     
@@ -82,6 +83,10 @@
                 
             
         
+               
+               
+                       
+        
 
         
             
--- a/alps/vendor/mediatek/proprietary/packages/providers/MediaProvider/src/com/android/providers/media/MediaScannerReceiver.java
+++ b/alps/vendor/mediatek/proprietary/packages/providers/MediaProvider/src/com/android/providers/media/MediaScannerReceiver.java
@@ -63,6 +63,18 @@ public class MediaScannerReceiver extends BroadcastReceiver {
     public void onReceive(Context context, Intent intent) {
         final String action = intent.getAction();
         Log.v(TAG, "onReceive action = " + action);
+               SharedPreferences sharedPreferences = context.getSharedPreferences("first_boot",Context.MODE_PRIVATE);
+               boolean first_boot= sharedPreferences.getBoolean("first_boot", true);//如果是第一次开机,则sharedPreferences 的值为空,赋值true
+               if (first_boot) {
+                       Log.v(TAG,"->CopyFileService");
+                       Intent activityIntent = new Intent();
+                       activityIntent.setClassName("com.android.providers.media", "com.android.providers.media.CopyFileService");
+                       context.startService(activityIntent);//启动拷贝文件的Services,由于文件比较大,onReceive方法里不能做耗时操作,可以用service解决
+               }
+               SharedPreferences.Editor editor1 = sharedPreferences.edit();
+               editor1.putBoolean("first_boot", false);//赋值false,表示下次开机不用再拷贝了
+               editor1.commit();
+                  
         if (Intent.ACTION_BOOT_COMPLETED.equals(action)) {
             Log.v(TAG,
             "onReceive BOOT_COMPLETED,begin to scan internal and external storage.");
(END)

只需要第一次开机进行拷贝就可以,防止后续重启每次都要进行重复操作。

CopyFileService.java

package com.android.providers.media;

import android.app.Service;
import android.content.Intent;
import android.os.Environment;
import android.os.IBinder;
import android.util.Log;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;

public class CopyFileService extends Service {

    private final static String TAG = "Monkey_CopyFileService";

    private static String PRELOAD_SRC = Environment.getRootDirectory()+"/media/demo";/
    public boolean copyToFile(InputStream inputStream, File destFile) {
        try {
            if (destFile.exists()) {
                destFile.delete();
            }
            FileOutputStream out = new FileOutputStream(destFile);
            try {
                byte[] buffer = new byte[4096];
                int bytesRead;
                while ((bytesRead = inputStream.read(buffer)) >= 0) {
                    out.write(buffer, 0, bytesRead);
                }
            } finally {
                out.flush();
                try {
                    out.getFD().sync();
                } catch (IOException e) {
                }
                out.close();
            }
            return true;
        } catch (IOException e) {
            return false;
        }
    }
}

PRELOAD_DEST 代表的是你要放置的目录这个可以通过adb进行获取。

PRELOAD_SRC 代表的是编译到system/media/demo/这个目录,位于out下。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/777279.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号