MTK(Android N)设置SDCard为默认存储

本文介绍了一个设备启动完成后如何自动设置默认存储路径的方法。通过检查所有存储是否已挂载,并允许用户手动更改默认存储位置。
思路:当系统将所有存储挂载完毕,然后调用StorageManagerEx.setDefaultPath(path)设置默认存储,当用户手动改变以后就跟随用户设置。
diff --git a/packages/apps/Settings/src/com/mediatek/settings/deviceinfo/StorageSettingsExts.java b/packages/apps/Settings/src/com/mediatek/settings/deviceinfo/StorageSettingsExts.java
old mode 100644
new mode 100755
index 445c7d5..0944468
--- a/packages/apps/Settings/src/com/mediatek/settings/deviceinfo/StorageSettingsExts.java
+++ b/packages/apps/Settings/src/com/mediatek/settings/deviceinfo/StorageSettingsExts.java
@@ -20,6 +20,9 @@ import com.mediatek.storage.StorageManagerEx;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
+/*gxk@Revo modify SDCard to default storage 20170818*/
+import android.provider.Settings;
+/*End of by gxk*/

 public class StorageSettingsExts {
     private static final String TAG = "StorageSettings";
@@ -114,6 +117,11 @@ public class StorageSettingsExts {
                 }
                 StorageManagerEx.setDefaultPath(preference.getKey());
                 Log.d(TAG, "Set default path : " + preference.getKey());
+/*gxk@Revo modify SDCard to default storage 20170818*/
+                if (com.android.featureoption.FeatureOption.PRJ_FEATURE_REVO_B_SET_DEFAULT_STORAGE){
+                    Settings.System.putInt(mActivity.getContentResolver(), "isUserSet", 1);
+                }
+/*End of by gxk*/
                 mDeafultWritePathPref = (RadioButtonPreference) preference;
                 return true;
             }
diff --git a/packages/providers/MediaProvider/src/com/android/providers/media/MediaScannerReceiver.java b/packages/providers/MediaProvider/src/com/android/providers/media/MediaScannerReceiver.java
old mode 100644
new mode 100755
index 9c9df73..15b2d93
--- a/packages/providers/MediaProvider/src/com/android/providers/media/MediaScannerReceiver.java
+++ b/packages/providers/MediaProvider/src/com/android/providers/media/MediaScannerReceiver.java
@@ -40,6 +40,13 @@ import android.os.storage.StorageVolume;
 import android.os.SystemProperties;
 import android.preference.PreferenceManager;
 import android.provider.MediaStore;
+/*gxk@Revo modify SDCard to default storage 20170818*/
+import com.mediatek.storage.StorageManagerEx;
+import java.util.ArrayList;
+import java.util.List;
+import android.provider.Settings;
+import com.android.featureoption.FeatureOption;
+/*End of by gxk*/

 public class MediaScannerReceiver extends BroadcastReceiver
 {
@@ -58,10 +65,19 @@ public class MediaScannerReceiver extends BroadcastReceiver
     static boolean sIsShutdown = !"def_value".equals(SystemProperties.get(
             "sys.shutdown.requested", "def_value"));
     private static final String DEVICE_MOUNT_BEFORE_BOOT = "dev.mount_before_boot";
+/*gxk@Revo modify SDCard to default storage 20170818*/
+    private StorageManager storageManager;
+    private int isUserSet = 0;
+/*End of by gxk*/

     @Override
     public void onReceive(Context context, Intent intent) {
         final String action = intent.getAction();
+/*gxk@Revo modify SDCard to default storage 20170818*/
+        storageManager = (StorageManager) context.getSystemService(Context.STORAGE_SERVICE);
+        if (FeatureOption.PRJ_FEATURE_REVO_B_SET_DEFAULT_STORAGE)
+            isUserSet = Settings.System.getInt(context.getContentResolver(), "isUserSet", 0);
+/*End of by gxk*/
         MtkLog.v(TAG, "onReceive action = " + action);
         if (Intent.ACTION_BOOT_COMPLETED.equals(action)) {
             MtkLog.v(TAG, "onReceive BOOT_COMPLETED, begin to scan internal and external storage.");
@@ -192,7 +208,7 @@ public class MediaScannerReceiver extends BroadcastReceiver
      * @return
      */
     private boolean isAllStorageMounted(Context context) {
-        StorageManager storageManager = (StorageManager) context.getSystemService(Context.STORAGE_SERVICE);
+        // StorageManager storageManager = (StorageManager) context.getSystemService(Context.STORAGE_SERVICE);
         StorageVolume[] ExternalVolumeList = storageManager.getVolumeList();
         for (StorageVolume storageVolume : ExternalVolumeList) {
             String path = storageVolume.getPath();
@@ -204,6 +220,18 @@ public class MediaScannerReceiver extends BroadcastReceiver
         }
         return true;
     }
+/*gxk@Revo modify SDCard to default storage 20170818*/
+    private StorageVolume[] getDefaultWriteDiskList() {
+        List<StorageVolume> storageVolumes = new ArrayList<StorageVolume>();
+        StorageVolume[] volumes = storageManager.getVolumeList();
+        for (StorageVolume volume : volumes) {
+            if (Environment.MEDIA_MOUNTED.equals(storageManager.getVolumeState(volume.getPath()))) {
+                storageVolumes.add(volume);
+            }
+        }
+        return storageVolumes.toArray(new StorageVolume[storageVolumes.size()]);
+    }
+/*End of by gxk*/

     /// M: get main handler to do check whether all storage have been mounted every CHECK_INTERVAL time.
     private Handler getHandler() {
@@ -221,6 +249,20 @@ public class MediaScannerReceiver extends BroadcastReceiver
                             scan(context, MediaProvider.EXTERNAL_VOLUME);
                             removeCallbacksAndMessages(null);
                             sHandler = null;
+/*gxk@Revo modify SDCard to default storage 20170818*/
+                            if (FeatureOption.PRJ_FEATURE_REVO_B_SET_DEFAULT_STORAGE &&
+                                 isUserSet == 0 && isAllStorageMounted(context)) {
+                                StorageVolume[] availableVolumes = getDefaultWriteDiskList();
+                                for (StorageVolume volume : availableVolumes) {
+                                    String path = volume.getPath();
+                                    MtkLog.v(TAG, "<getHandler> setDefaultPath = " + path);
+                                    if (path != null && !"/storage/emulated/0".equals(path)) {
+                                        StorageManagerEx.setDefaultPath(path);
+                                        break;
+                                    }
+                                }
+                            }
+/*End of by gxk*/
                         } else {
                             MtkLog.v(TAG, "Some storage has not been mounted, wait it mounted until time out.");
                             Message next = obtainMessage(msg.what, waitTime + CHECK_INTERVAL, -1, msg.obj);
<think>嗯,用户想在MTK Android平台上配置DebugLoggerUI,实现开机后自动抓取日志。我需要先回忆一下之前相关的引用资料,看看有没有相关的配置方法。 根据引用[1]提到在Android10下拿掉DebugLoggerUI的方法,可能需要修改工程模式相关的代码。而引用[4]中的DebugLoggerUI设置,用户需要开启mobilelog并删除旧日志。不过用户现在需要的是开机自动抓log,这可能涉及到系统默认配置的修改。 引用[3]提到在userdebug和eng版本中默认开启串口日志,可能需要检查内核配置。但用户可能是在user版本上操作,这时候可能需要通过暗码或者修改系统属性来开启。 然后引用[2]是关于在user版本打开MtkLog功能,通过修改AndroidManifest.xml添加暗码入口。这可能和自动启动相关,但用户需要的是自动抓取,而不是手动输入暗码进入。 可能需要找到系统启动时自动启用DebugLoggerUI的机制。例如,是否有系统属性或者配置文件可以设置自动启动日志记录。另外,检查是否有init.rc脚本或者服务负责启动日志服务,可以在这里添加启动命令。 另外,用户可能需要修改系统属性persist.sys.debuglogger.autostart或者类似的属性,设为1来启用自动启动。同时,确保日志路径正确,并且有足够的存储空间。 可能还需要在设备启动后自动执行adb命令来启动日志记录,但需要考虑权限问题,尤其是在user版本上可能需要签名或者系统权限。 总结一下,步骤可能包括:修改系统属性、配置init脚本、调整内核参数,以及处理权限问题。需要确保每一步都正确,并且适用于目标设备的Android版本和MTK平台。</think>### MTK Android DebugLoggerUI 开机自动抓Log配置方法 #### 一、内核配置调整 对于MTK平台,首先需确保内核层已启用UART日志输出功能: ```makefile # kernel-5.10/arch/$(ARCH)/configs/mgk_xxxx_defconfig CONFIG_MTK_PRINTK_UART_CONSOLE=y CONFIG_LOG_BUF_SHIFT=19 ``` 该配置确保系统启动阶段即开启日志缓冲[^3] #### 二、系统属性配置 在`/vendor/default.prop`或`/system/build.prop`中添加: ``` persist.sys.debuglogger.enable=1 persist.sys.debuglogger.autostart=1 persist.logd.logpersistd=logcatd ``` 该属性设置会触发init进程自动加载日志服务[^2] #### 三、EngineerMode模块修改 1. 修改工程模式入口配置: ```xml <!-- vendor/mediatek/proprietary/packages/apps/EngineerMode/AndroidManifest.xml --> <intent-filter> <data android:scheme="android_secret_code" android:host="3646633" /> <data android:scheme="android_secret_code" android:host="9527686" /> </intent-filter> ``` 2. 在`/vendor/mediatek/proprietary/packages/apps/EngineerMode/src/com/mediatek/engineermode/debuglogger/DebugLoggerUi.java`中添加: ```java @Override protected void onResume() { super.onResume(); if (getIntent().getAction().equals(Intent.ACTION_BOOT_COMPLETED)) { startLoggingAutomatically(); } } ``` #### 四、日志存储配置 在`/vendor/mediatek/proprietary/external/mtklog/LogPlot/DebugLoggerService.java`中设置: ```java private static final String AUTO_START_FLAG = "persist.debuglogger.autostart"; private static final String LOG_PATH = "/sdcard/mtklog/mobilelog"; ``` #### 五、SELinux权限配置 在`/device/mediatek/sepolicy/vendor/debuglogger.te`添加: ``` allow debuglogger system_file:dir { search write }; allow debuglogger sdcardfs:file { create write }; ``` #### 六、验证方法 开机后执行: ```bash adb shell dumpsys activity service DebugLoggerService ``` 应看到`isAutoStart=true`和`currentLogPath=/sdcard/mtklog/mobilelog`状态
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值