DELPHI盒子
!实时搜索: 盒子论坛 | 注册用户 | 修改信息 | 退出
检举帖 | 全文检索 | 关闭广告 | 捐赠
技术论坛
 用户名
 密  码
自动登陆(30天有效)
忘了密码
≡技术区≡
DELPHI技术
lazarus/fpc/Free Pascal
移动应用开发
Web应用开发
数据库专区
报表专区
网络通讯
开源项目
论坛精华贴
≡发布区≡
发布代码
发布控件
文档资料
经典工具
≡事务区≡
网站意见
盒子之家
招聘应聘
信息交换
论坛信息
最新加入: sprblck
今日帖子: 11
在线用户: 21
导航: 论坛 -> DELPHI技术 斑竹:liumazi,sephil  
作者:
男 diystar (diystar) ★☆☆☆☆ -
普通会员
2017/1/14 10:38:05
标题:
安卓怎样扫描音乐文件? 浏览:1386
加入我的收藏
楼主: 以下代码扫描不到:

unit main;

interface

uses
  System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
  FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, StrUtils,
  System.IOUtils, FMX.StdCtrls, FMX.Layouts, FMX.ListBox;

type
  TForm1 = class(TForm)
    MList: TListBox;
    Scan: TButton;
    procedure ScanClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.fmx}
{$R *.NmXhdpiPh.fmx ANDROID}
{$R *.SmXhdpiPh.fmx ANDROID}

procedure TForm1.ScanClick(Sender: TObject);
var
  s:String;

  procedure AddF;
  var
    s1,s2:String;
    sr:TSearchRec;
  begin
    if FindFirst(s+'*.*',faHidden+faReadOnly,sr)=0 then
    begin
      repeat
        s1:=s+sr.Name;
        s2:=ExtractFileExt(s1);
        if s2<>'' then
        s2:=s2+';';
        if ContainsText('*.mp3;*.ape;*.tak;*.aac;*.flac;*.m4a;*.ogg;*.wav;',s2) then
        if FileExists(s1) then
        MList.Items.Add(s1);
      until FindNext(sr)<>0;
      FindClose(sr);
    end;
  end;

  procedure FindF;
  var
    t:String;
    b:Boolean;
    sr:TSearchRec;
  begin
    if FindFirst(s+'*',faDirectory,sr)=0 then
    begin
      repeat
        t:=s;
        s:=s+sr.Name+PathDelim;
        b:=DirectoryExists(s) and (sr.Name[1]<>'.');
        if b then
        begin
          AddF;
          FindF;
        end;
        s:=t;
      until FindNext(sr)<>0;
      FindClose(sr);
    end;
  end;

begin
  s:=TPath.GetDocumentsPath+PathDelim;
  AddF;
  FindF;
  s:=TPath.GetSharedDocumentsPath+PathDelim;
  AddF;
  FindF;
end;

end.
----------------------------------------------
http://mcool.appinn.me/
作者:
男 diystar (diystar) ★☆☆☆☆ -
普通会员
2017/1/14 13:42:14
1楼: 这样对不对呢:

procedure TForm1.ScanClick(Sender: TObject);
var
  s:String;

  procedure AddF;
  var
    s1,s2:String;
    files : TStringDynArray;
    i:Integer;
  begin
    files := TDirectory.GetFiles (s);

    for i := 0 to length(files)-1 do
    begin
      s1:=s+files[i];
      s2:=ExtractFileExt(s1);
      if s2<>'' then
      s2:=s2+';';
      if ContainsText('*.mp3;*.ape;*.tak;*.aac;*.flac;*.m4a;*.ogg;*.wav',s2) then
      MList.Items.Add(s1);
    end;
  end;

  procedure FindF;
  var
    t:String;
    b:Boolean;
    folders: TStringDynArray;
    i:Integer;
  begin
    folders := TDirectory.GetDirectories (s);

    for i := 0 to length(folders)-1 do
    begin
      t:=s;
      s:=s+folders[i]+PathDelim;
      AddF;
      FindF;
      s:=t;
    end;
  end;

begin
  s:=TPath.GetDocumentsPath+PathDelim;
  AddF;
  FindF;
  s:=TPath.GetSharedDocumentsPath+PathDelim;
  AddF;
  FindF;
end;
----------------------------------------------
http://mcool.appinn.me/
作者:
男 sail2000 (小帆工作室) ★☆☆☆☆ -
盒子活跃会员
2017/1/14 17:01:40
2楼: 參考易博龙的文档:
http://docwiki.embarcadero.com/CodeExamples/Seattle/en/DirectoriesAndFilesEnumeraion_(Delphi)
----------------------------------------------
delphi 是兴趣,和工作无关,即使它倒闭。又不靠它 delphi 吃饭,怕甚?
作者:
男 wang_80919 (Flying Wang) ★☆☆☆☆ -
普通会员
2017/1/16 9:49:01
3楼: 打开开始菜单,找到 Samples EMB 给你写了音乐播放器的 DEMO 了 。
可惜啊,瞎子太多,都看不见。
----------------------------------------------
(C)(P)Flying Wang
作者:
男 diystar (diystar) ★☆☆☆☆ -
普通会员
2017/1/16 11:22:09
4楼: @Flying Wang 官方示例太简单,bass库才够强大
----------------------------------------------
http://mcool.appinn.me/
作者:
男 wang_80919 (Flying Wang) ★☆☆☆☆ -
普通会员
2017/1/16 11:24:30
5楼: 楼主你不是要扫描吗?
bass库 能扫描吗?
----------------------------------------------
(C)(P)Flying Wang
作者:
男 diystar (diystar) ★☆☆☆☆ -
普通会员
2017/1/16 11:33:36
6楼: 要用 bass库,必须要自己扫描文件啊
----------------------------------------------
http://mcool.appinn.me/
作者:
男 wang_80919 (Flying Wang) ★☆☆☆☆ -
普通会员
2017/1/16 11:34:06
7楼: 算了,我不应该瞎哔哔的。关我屁事。
----------------------------------------------
(C)(P)Flying Wang
作者:
男 diystar (diystar) ★☆☆☆☆ -
普通会员
2017/1/18 12:32:49
8楼: 搞定了:

...

type
  TForm1 = class(TForm)
    MList: TListView;
    Scan: TButton;
    procedure ScanClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

...

procedure TForm1.ScanClick(Sender: TObject);
var
  s:String;

  procedure AddF;
  var
    s1,s2:String;
    files : TStringDynArray;
    i:Integer;
  begin
    files := TDirectory.GetFiles (s);

    for i := 0 to length(files)-1 do
    begin
      s1:=files[i];
      s2:=ExtractFileExt(s1);
      if s2<>'' then
      s2:=s2+';';
      if ContainsText('*.mp3;*.ape;*.tak;*.aac;*.flac;*.m4a;*.ogg;*.wav;',s2) then
      with MList.Items.Add do
      begin
        Text:=ExtractFileName(s1);
        Detail:=s1;
      end;
    end;
  end;

  procedure FindF;
  var
    t:String;
    folders: TStringDynArray;
    i:Integer;
  begin
    folders := TDirectory.GetDirectories (s);

    for i := 0 to length(folders)-1 do
    begin
      t:=s;
      s:=folders[i]+PathDelim;
      AddF;
      FindF;
      s:=t;
    end;
  end;

begin
  s:='/storage/';
  AddF;
  FindF;
  if not DirectoryExists('/storage/sdcard/') then
  begin
    s:='/sdcard/';
    AddF;
    FindF;
  end;
end;

小帆前辈提到的方法更简便,但我这个可以更多自定义
----------------------------------------------
http://mcool.appinn.me/
作者:
男 diystar (diystar) ★☆☆☆☆ -
普通会员
2017/1/24 13:59:16
9楼: 嗯,还得请出 @Flying Wang 的 FlyFilesUtils:

uses
  FlyFilesUtils;

...

  s:=GetSDCardPath(0);
  if DirectoryExists(s) then
  begin
    AddF;
    FindF;
  end;
  s:=GetSDCardPath(1);
  if DirectoryExists(s) then
  begin
    AddF;
    FindF;
  end;

...

要不然,不是扫描不到,就是扫到太多重复项(谷歌这方面太蛋疼了)
----------------------------------------------
http://mcool.appinn.me/
作者:
男 wang_80919 (Flying Wang) ★☆☆☆☆ -
普通会员
2017/1/24 19:02:59
10楼: 谷歌明明提供了媒体文件专用 API,你何必自己去扫描SD卡?
----------------------------------------------
(C)(P)Flying Wang
作者:
男 diystar (diystar) ★☆☆☆☆ -
普通会员
2017/1/25 13:18:31
11楼: 掌握一些底层的东西总是好的
----------------------------------------------
http://mcool.appinn.me/
信息
登陆以后才能回复
Copyright © 2CCC.Com 盒子论坛 v3.0.1 版权所有 页面执行70.3125毫秒 RSS