<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                MSR模塊的核心類MediaScannerReceiver從BroadcastReceiver派生,它是專門用來接收廣播的,那么它感興趣的廣播有哪幾種呢?其代碼如下所示: **MediaScannerReceiver.java** ~~~ public class MediaScannerReceiver extendsBroadcastReceiver { private final static String TAG ="MediaScannerReceiver"; @Override //MSR在onReceive函數中處理廣播 publicvoid onReceive(Context context, Intent intent) { String action = intent.getAction(); Uri uri = intent.getData(); //一般手機外部存儲的路徑是/mnt/sdcard String externalStoragePath = Environment.getExternalStorageDirectory().getPath(); //為了簡化書寫,所有Intent的ACTION_XXX_YYY字串都會簡寫為XXX_YYY。 if(action.equals(Intent.ACTION_BOOT_COMPLETED)) { //如果收到BOOT_COMPLETED廣播,則啟動內部存儲區的掃描工作,內部存儲區 //實際上掃描的是/system/media目錄,這里存儲了系統自帶的鈴聲等媒體文件。 scan(context, MediaProvider.INTERNAL_VOLUME); }else { if (uri.getScheme().equals("file")) { String path = uri.getPath(); /* 注意下面這個判斷,如果收到MEDIA_MOUNTED消息,并且外部存儲掛載的路徑 和“/mnt/sdcard“一樣,則啟動外部存儲也就是SD卡的掃描工作 */ if (action.equals(Intent.ACTION_MEDIA_MOUNTED) && externalStoragePath.equals(path)) { scan(context,MediaProvider.EXTERNAL_VOLUME); } else if(action.equals(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE) && path != null && path.startsWith(externalStoragePath +"/")) { /* 外部應用可以發送MEDIA_SCANNER_SCAN_FILE廣播讓MSR啟動單個文件 的掃描工作。注意這個文件必須位于SD卡上。 */ scanFile(context, path); } } } } ~~~ 從上面代碼中發現MSR接收的三種請求,也就是說,它對外提供三個接口函數: - 接收BOOT_COMPLETED請求,這樣MSR會啟動內部存儲區的掃描工作,注意這個內部存儲區實際上是/system/media這個目錄。 - 接收MEDIA_MOUNTED請求,并且該請求攜帶的外部存儲掛載點路徑必須是/mnt/sdcard,通過這種方式MSR會啟動外部存儲區也就是SD卡的掃描工作,掃描目標是文件夾/mnt/sdcard。 - 接收MEDIA_SCANNER_SCAN_FILE請求,并且該請求必須是SD卡上的一個文件,即文件路徑須以/mnt/sdcard開頭,這樣,MSR會啟動針對這個文件的掃描工作。 讀者是否注意到,MSR和跨Binder調用的接口(在本章拓展內容中將介紹)都不支持對目錄的掃描(除了SD卡的根目錄外)。實現這個功能并不復雜,有興趣的讀者可自行完成該功能,如果方便,請將自己實現的代碼與大家共享。 大部分的媒體文件都已放在SD卡上了,那么來看收到MEDIA_MOUNTED請求后MSR的工作。還記得第9章中對Vold的分析嗎?這個MEDIA_MOUNTED廣播就是由MountService發送的,一旦有SD卡被掛載,MSR就會被這個廣播喚醒,接著SD卡的媒體文件就會被掃描了。真是一氣呵成! SD卡根目錄掃描時調用的函數scan的代碼如下: **MediaScannerReceiver.java** ~~~ private void scan(Context context, Stringvolume) { //volume的值為/mnt/sdcard Bundleargs = new Bundle(); args.putString("volume", volume); //啟動MSS。 context.startService( new Intent(context, MediaScannerService.class).putExtras(args)); } ~~~ scan將啟動MSS服務。下面來看MSS的工作。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看