как получить историю браузера в андроиде?

Я хотел бы реализовать приложение для получения истории браузера по умолчанию для Android и сохранения истории браузера в файле xml. Но история браузера не сохраняется на некоторых устройствах в файл xml.

Я реализовал свое приложение для получения информации об истории браузера для сохранения в файл xml следующим образом:

private void browserHistoryDOM() {
    try{
        File newxmlfile = new File("/sdcard/Xmlfiles/briwserHistory.xml");
        newxmlfile.createNewFile();
        DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
        DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
        Document document = documentBuilder.newDocument();
        Element rootElement = document.createElement("root");
        document.appendChild(rootElement);

        Cursor mCur = managedQuery(Browser.BOOKMARKS_URI,Browser.HISTORY_PROJECTION, null, null, null);
        mCur.moveToFirst();

        if (mCur.moveToFirst() && mCur.getCount() > 0) {
            while (mCur.isAfterLast() == false) {
                Element em = document.createElement("bookmarkIdx");
                em.appendChild(document.createTextNode(mCur.getString(Browser.HISTORY_PROJECTION_BOOKMARK_INDEX)));
                rootElement.appendChild(em);

                long callDate = Long.parseLong(mCur.getString(Browser.HISTORY_PROJECTION_DATE_INDEX));
                SimpleDateFormat datePattern = new SimpleDateFormat ("dd-MM-yyyy/h:m:s:a");
                datePattern.setTimeZone(TimeZone.getTimeZone("GMT"));
                String date_str = datePattern.format(new Date(callDate));

                Element em1 = document.createElement("dateIdx");
                em1.appendChild(document.createTextNode(date_str));
                rootElement.appendChild(em1);

                Element em2 = document.createElement("idIdx");
                em2.appendChild(document.createTextNode(mCur.getString(Browser.HISTORY_PROJECTION_ID_INDEX)));
                rootElement.appendChild(em2);

                Element em3 = document.createElement("titleIdx");
                em3.appendChild(document.createTextNode(mCur.getString(Browser.HISTORY_PROJECTION_TITLE_INDEX)));
                rootElement.appendChild(em3);

                Element em4 = document.createElement("urlIdx");
                em4.appendChild(document.createTextNode(mCur.getString(Browser.HISTORY_PROJECTION_URL_INDEX)));
                rootElement.appendChild(em4);

                Element em5 = document.createElement("visitsIdx");
                em5.appendChild(document.createTextNode(mCur.getString(Browser.HISTORY_PROJECTION_VISITS_INDEX)));
                rootElement.appendChild(em5);

                long searchDate = Long.parseLong(mCur.getString(Browser.SEARCHES_PROJECTION_DATE_INDEX));
                SimpleDateFormat datePattern1 = new SimpleDateFormat ("dd-MM-yyyy/h:m:s:a");
                datePattern1.setTimeZone(TimeZone.getTimeZone("GMT"));
                String date_str1 = datePattern.format(new Date(searchDate));

                Element em6 = document.createElement("searchDateIdx");
                em6.appendChild(document.createTextNode(date_str1));
                rootElement.appendChild(em6);

                Element em7 = document.createElement("searchIdx");
                em7.appendChild(document.createTextNode(mCur.getString(Browser.SEARCHES_PROJECTION_SEARCH_INDEX)));
                rootElement.appendChild(em7);

                Element em8 = document.createElement("truncateIdIdx");
                em8.appendChild(document.createTextNode(mCur.getString(Browser.TRUNCATE_HISTORY_PROJECTION_ID_INDEX)));
                rootElement.appendChild(em8);

                Element em9 = document.createElement("truncateOldest");
                em9.appendChild(document.createTextNode(mCur.getString(Browser.TRUNCATE_N_OLDEST)));
                rootElement.appendChild(em9);

                mCur.moveToNext();
            }
        }

        TransformerFactory transformerFactory = TransformerFactory.newInstance();
        Transformer transformer = transformerFactory.newTransformer();
        DOMSource source = new DOMSource(document);
        StreamResult result = new StreamResult(newxmlfile);
        transformer.transform(source, result);

    } catch (Exception e) {
        e.printStackTrace();
    }
}

Используя описанный выше метод, я могу получить историю браузера и сохранить данные в файле xml на SD-карте. Но на некоторых устройствах Android история браузера не отображается полностью и не сохраняется в файл xml. Если я тестирую приложение на Motorola Устройство Droid работает нормально. Но если я протестирую то же приложение на npm702 NOVO7PALADIN, то я не смогу получить историю браузера в своем XML-файле.


person prasad.gai    schedule 01.05.2012    source источник


Ответы (1)


Во-первых, никогда не подключайте /sdcard. Используйте Environment.getExternalStorageDirectory(), чтобы добраться до корня внешнего хранилища.

Во-вторых, Browser.BOOKMARKS_URI в лучшем случае будет работать для браузерного приложения с открытым исходным кодом, которое является частью проекта Android с открытым исходным кодом. Производители устройств могут заменить это приложение чем-то другим, что не будет записывать его историю, закладки или что-либо еще в этом ContentProvider. Точно так же пользователям разрешено загружать сторонние браузеры, которые могут не хранить информацию в этом ContentProvider.

В-третьих, NOVO7PALADIN может не пройти набор тестов на совместимость, особенно если на нем не предустановлен Google Play Store (ранее Android Market). Это означало бы, что производитель устройства может сломать все, что захочет, в том числе, хранит ли приложение браузера с открытым исходным кодом что-то в этом файле ContentProvider.

Вам нужно будет связаться с производителем NOVO7PALADIN, чтобы узнать больше.

person CommonsWare    schedule 01.05.2012