Browser.EXTRA_APPLICATION_ID do not work in the ta

2019-03-05 03:37发布

EXTRA_APPLICATION_ID seems not to work in the tablet. Do you know other work around to reuse tab of the Browser.apk when starting the Browser by intent from my service. This is directly related to 9902225. Any hints is appreciated.

Cause: The resuseTab() will not be called if the device is a tablet.

See line:

* 3-tablet) Open new tab

See line:

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

// Browser.apk source code (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条回答
对你真心纯属浪费
2楼-- · 2019-03-05 04:10

For ICS and tablet devices, you need to set the intent's App ID as the browser's App ID. So you need to use com.android.browser instead of getPackageName()

查看更多
登录 后发表回答