Браузер.EXTRA_APPLICATION_ID не работает на планшете. Знаете ли вы другие способы повторно использовать вкладку Browser.apk? - PullRequest
0 голосов
/ 28 марта 2012

EXTRA_APPLICATION_ID, похоже, не работает на планшете.Знаете ли вы другую работу, чтобы повторно использовать вкладку Browser.apk при запуске браузера намеренно из моей службы.Это напрямую связано с 9902225 .Любые намеки приветствуются.

Причина: resuseTab () не будет вызываться, если устройство представляет собой планшет.

См. Строку:

* 3-tablet) Open new tab

См. Строку:

if (activateVoiceSearch || !BrowserActivity.isTablet(mActivity)) {

// Исходный код Browser.apk (Android 4.0.3_r1-6)

com.android.browser.IntentHandler

void onNewIntent(Intent intent) {
....
   /*
     * TODO: Don't allow javascript URIs
     * 0) If this is a javascript: URI, *always* open a new tab
     * 1) If this is a voice search, re-use tab for appId
     *    If there is no appId, use current tab
     * 2) If the URL is already opened, switch to that tab
     * 3-phone) Reuse tab with same appId
     * 3-tablet) Open new tab
     */
    final String appId = intent
            .getStringExtra(Browser.EXTRA_APPLICATION_ID);
    if (!TextUtils.isEmpty(urlData.mUrl) &&
            urlData.mUrl.startsWith("javascript:")) {
        // Always open javascript: URIs in new tabs
        mController.openTab(urlData);
        return;
    }
    if ((Intent.ACTION_VIEW.equals(action)
            // If a voice search has no appId, it means that it came
            // from the browser.  In that case, reuse the current tab.
            || (activateVoiceSearch && appId != null))
            && !mActivity.getPackageName().equals(appId)) {
        if (activateVoiceSearch || !BrowserActivity.isTablet(mActivity)) {
            Tab appTab = mTabControl.getTabFromAppId(appId);
            if (appTab != null) {
                mController.reuseTab(appTab, urlData);
                return;
            }
        }
        // No matching application tab, try to find a regular tab
        // with a matching url.
        Tab appTab = mTabControl.findTabWithUrl(urlData.mUrl);
        if (appTab != null) {
            // Transfer ownership
            appTab.setAppId(appId);
            if (current != appTab) {
                mController.switchToTab(appTab);
            }
            // Otherwise, we are already viewing the correct tab.
        } else {
            // if FLAG_ACTIVITY_BROUGHT_TO_FRONT flag is on, the url
            // will be opened in a new tab unless we have reached
            // MAX_TABS. Then the url will be opened in the current
            // tab. If a new tab is created, it will have "true" for
            // exit on close.
            Tab tab = mController.openTab(urlData);
            if (tab != null) {
                tab.setAppId(appId);
                if ((intent.getFlags() & Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT) != 0) {
                    tab.setCloseOnBack(true);
                }
            }
        }

1 Ответ

11 голосов
/ 29 марта 2012

Для ICS и планшетных устройств вам необходимо установить идентификатор приложения в приложении в качестве идентификатора приложения браузера. Поэтому вам нужно использовать com.android.browser вместо getPackageName()

...