首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >黑莓10扫描库

黑莓10扫描库
EN

Stack Overflow用户
提问于 2018-02-27 07:56:40
回答 1查看 63关注 0票数 0

我正在研究内容迁移应用程序。我必须将联系人、日历、媒体从黑莓设备迁移到Android设备。我做过的联系人和日历。

我使用了下面的代码片段作为联系人。

代码语言:javascript
复制
ContactService contactService;
ContactListFilters filters;
filters.setLimit(0);
QList<Contact> contactList = contactService.contacts(filters);

和下面的日历

代码语言:javascript
复制
CalendarService calendarService;
EventSearchParameters searchParams;
searchParams.setStart(QDateTime(QDate(1918, 01, 01), QTime(00,00,00)));
searchParams.setEnd(QDateTime(QDate(2118, 12, 31), QTime(00,00,00)));
QList<CalendarEvent> eventList = calendarService.events(searchParams);

工作很好。

现在,我必须查找设备中的媒体,即根据输入获取媒体路径,输入所有图像、所有音频和设备中的所有视频。 然后,使用这些路径必须创建一个输出流并将其发送到目的地。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-02-28 02:19:47

我听说您可以查询每个设备上可用的media数据库,但是我自己从来没有这样做过,所以我无法在这个设备上提供帮助。db文件位于存储在设备上的媒体文件的/db/mmlibrary.db和存储在SD卡上的媒体文件的/db/mmlibrary_SD.db

否则,您可以递归地在设备中导航,并保留文件路径的全局列表。注意,这样做需要很长时间,对于我的个人设备,递归遍历所有文件夹并找到186个音频文件、5127个图片文件和28个视频文件需要25秒。您可能希望在单独的线程中执行此代码,以避免阻塞UI。

代码语言:javascript
复制
#include "applicationui.hpp"

#include <bb/cascades/Application>
#include <bb/cascades/QmlDocument>
#include <bb/cascades/AbstractPane>

#include <QFileInfo>
#include <QDir>

using namespace bb::cascades;

const QStringList audioFileExtensions = QStringList() << "mp3" << "wav";
const QStringList pictureFileExtensions = QStringList() << "bmp" << "gif" << "ico" << "jpg" << "jpeg" << "png" << "tiff";
const QStringList videoFileExtensions = QStringList() << "avi" << "mkv" << "mp4" << "mpeg";

ApplicationUI::ApplicationUI() :
        QObject()
{
    QmlDocument *qml = QmlDocument::create("asset:///main.qml").parent(this);
    qml->setContextProperty("_app", this);

    AbstractPane *root = qml->createRootObject<AbstractPane>();
    Application::instance()->setScene(root);
}

//Declared as public Q_INVOKABLE in hpp
void ApplicationUI::findMediaFiles(QString parentFolder) {
    QDateTime start = QDateTime::currentDateTime();
    qDebug() << "findMediaFiles() started in" << parentFolder;

    //Those 3 QStringList are declared as private variables in hpp
    audioFilePaths.clear();
    pictureFilePaths.clear();
    videoFilePaths.clear();

    if (parentFolder.isEmpty()) {
        parentFolder = QString(getenv("PERIMETER_HOME")) + "/shared";
    }

    findMediaFilesRecursively(parentFolder);

    qDebug() << audioFilePaths.size() << audioFilePaths;
    qDebug() << pictureFilePaths.size() << pictureFilePaths;
    qDebug() << videoFilePaths.size() << videoFilePaths;
    qDebug() << "Took" << start.secsTo(QDateTime::currentDateTime()) << "seconds";
}

//Declared as private in hpp
void ApplicationUI::findMediaFilesRecursively(QString parentFolder) {
    QDir dir(parentFolder);
    dir.setFilter(QDir::Dirs | QDir::Files | QDir::Hidden | QDir::NoDotAndDotDot | QDir::NoSymLinks);
    dir.setSorting(QDir::DirsFirst);
    QFileInfoList fileInfoList = dir.entryInfoList();

    foreach(QFileInfo fileInfo, fileInfoList) {
        if (fileInfo.isDir()) {
            findMediaFilesRecursively(fileInfo.absoluteFilePath());
            continue;
        }

        QString extension = fileInfo.fileName().split(".").last();

        if (audioFileExtensions.contains(extension, Qt::CaseInsensitive)) {
            audioFilePaths.append(fileInfo.absoluteFilePath());
        }
        else if (pictureFileExtensions.contains(extension, Qt::CaseInsensitive)) {
            pictureFilePaths.append(fileInfo.absoluteFilePath());
        }
        else if (videoFileExtensions.contains(extension, Qt::CaseInsensitive)) {
            videoFilePaths.append(fileInfo.absoluteFilePath());
        }
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49003744

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档