7

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();
    }
}

上記の方法を使用することで、ブラウザーの履歴を取得し、データをsdcardのxmlファイルに保存できますが、一部のAndroidデバイスでは、ブラウザーの履歴が完全に取得されず、xmlファイルに保存されません。Motorolaでアプリをテストした場合Droidデバイスは正常に動作していますが、同じアプリをnpm702 NOVO7PALADINでテストした場合、xmlファイルでブラウザーの履歴を取得できません。

4

1 に答える 1

9

まず、配線しないで/sdcardください。Environment.getExternalStorageDirectory()外部ストレージのルートに到達するために使用します。

第二に、Browser.BOOKMARKS_URIせいぜい、Android OpenSourceProjectの一部であるオープンソースブラウザアプリで機能します。デバイスメーカーは、そのアプリを、その履歴、ブックマーク、またはその他のものを記録しないものに置き換えることを歓迎しますContentProvider。同様に、ユーザーはサードパーティのブラウザをダウンロードできますが、サードパーティのブラウザには保存されていない可能性がありますContentProvider

第三に、NOVO7PALADINは、特にGoogle Playストア(以前のAndroidマーケット)がプリインストールされていない場合、互換性テストスイートに合格しなかった可能性があります。つまり、デバイスメーカーは、オープンソースのブラウザーアプリがその中に物を保存するかどうかなど、必要なものをすべて壊して大歓迎ですContentProvider

詳細については、NOVO7PALADINの製造元に問い合わせる必要があります。

于 2012-05-01T11:44:52.393 に答える