思路:当系统将所有存储挂载完毕,然后调用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 BroadcastReceiverstatic 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*/@Overridepublic 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 BroadcastReceiverscan(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);

MTK(Android N)设置SDCard为默认存储相关推荐

  1. android 之SharedPreferences,SDCard以及网络存储

    android 之数据存储分类: A.Shared Preferences:存储私有的数据以键值对的形式 B.内部存储:在设备的内存中存储私有数据 C.外部存储:在外部设备(手机SDCard等)存储共 ...

  2. android语言设置,android9.0默认系统语言改为中文

    第一种方法: 修改 build/tools/buildinfo.sh echo "ro.product.locale.language=zh" echo "ro.prod ...

  3. 索尼android sd卡上,索尼的手机默认存储如何设置到SD卡上呢?

    2014-01-18 红米手机联通合约机怎么把软件默认存储到外置sd卡1上 受网友启发,采用以下步骤: 1,下载百度一键ROOT,获取root权限 2,下载RE管理器,进入root fold的etc文 ...

  4. Android Studio 设置打开layout.xml文件的默认视图

    Android Studio 设置打开layout.xml文件的默认视图 Android Studio 设置打开layout.xml文件的默认视图 androd studio 在使用的时候打开我们自己 ...

  5. android ROM设置默认Launcher(主屏幕应用)

    Launcher Launcher是android系统的桌面.是android系统的主要组件.android系统允许存在多个Launcher并设置默认主界面. 应用程序作为Home(主界面)需在Act ...

  6. android 固定launcher,android Launcher3设置默认桌面应用

    android launcher3 设置默认桌面应用,供大家参考,具体内容如下 launcher3 的默认桌面应用是在 res/xml里 默认有4种样式 default_workspace_3x3.x ...

  7. android设置为默认短信应用,如何在Android上设置默认短信应用 | MOS86

    与iOS不同,Android允许您使用第三方应用来执行基本功能,例如发短信. 这是您可以在Android手机上设置新的默认短信应用的方法. 首先,您需要安装要使用的替换短信应用程序. Play商店上有 ...

  8. 如何在Android上设置默认短信应用

    Noyna/ShutterstockNoyna /快门 Unlike iOS, Android allows you to use third-party apps to perform essent ...

  9. android查询设置默认应用

    Android作为一个伟大的系统,自然提供了设置默认打开程序的实现.在这篇文章中,我会介绍如何在Android系统中设置默认的程序. 在设置默认程序之前,无非有两种情况,一种是已经有默认的程序,另一种 ...

  10. Android 如何设置视频来电的默认铃声

    前言          欢迎大家我分享和推荐好用的代码段~~ 声明          欢迎转载,但请保留文章原始出处:          CSDN:http://www.csdn.net        ...

最新文章

  1. Lecture 0 --基本说明
  2. AngularJs Cookie 的使用
  3. 小宝机器人的储存容量_新iPad Pro储存越来越大:甚至到1T!您应该购买哪种存储容量呢?...
  4. Codeforces#363 Div2
  5. 交换技术、覆盖技术、虚拟存储技术的区分
  6. .NET Core开发实战(第5课:依赖注入:良好架构的起点)--学习笔记(下)
  7. 开学典礼上,施一公寄语:西湖大学绝不允许任何形式的学术不端!
  8. 如何将Linux还原为win10,技术编辑为你解说win10系统Linux Bash命令的还原步骤
  9. iconfont 无法导入 svg_Figma绘制图标上传至iconfont的正确姿势
  10. win7mysql卸载数据库_win7系统彻底卸载Mysql数据库的操作方法
  11. 面试阿里(P8)竟被MySQL难倒,奋发图强二次面试斩获阿里offer
  12. 2020年云计算发展趋势怎么样?
  13. Android:方向传感器
  14. 阿里技术风险与效能部负责人张瓅玶:阿里集团深度用云实践
  15. java 反余弦_Java acos() 方法
  16. ostu阈值分割python实现_opencv python 图像二值化/简单阈值化/大津阈值法
  17. ARM体系结构2:处理器内核和汇编指令集
  18. tailWindCSS
  19. mysqli info
  20. 协议分析实战:某航某凰知音用户名及密码提取

热门文章

  1. 盘点一道使用Python编程来实现高斯计算的基础算术题目
  2. Simpson自适应Simpson
  3. QtCreator插件开发(二)——QtCreator菜单和菜单项
  4. 数据猿专访诸葛io孔淼:数据与业务“动态”结合才能发挥最大威力
  5. 华为交换机设置ACL时间控制
  6. Office和Visio2019兼容下载
  7. 【Kaldi例子】Librispeech数据整理
  8. win7与internet时间同步出错_Windows7旗舰版系统同步internet时间总是提示同步时出错怎么办...
  9. 市面上有哪些程序化软件?
  10. 如何利用CustomFont+PS制作字体