feat(browser): 支持外部应用调用传入网页地址

- 在 AndroidManifest.xml 为 MainActivity 添加 http/https 的 intent-filter
- 设置 singleTask 启动模式以复用 Activity 实例
- BrowserFragment 新增 MSG_OPEN_URL 消息处理外部 URL 跳转
- MainActivity 实现 handleExternalUrl 方法,在 onCreate/onNewIntent 中捕获并加载网页
This commit is contained in:
2026-05-06 11:17:13 +08:00
parent aef5a62e47
commit cd0599d639
4 changed files with 42 additions and 4 deletions

View File

@@ -1,8 +1,8 @@
#Created by .winboll/winboll_app_build.gradle #Created by .winboll/winboll_app_build.gradle
#Wed May 06 11:08:36 CST 2026 #Wed May 06 11:16:28 CST 2026
stageCount=27 stageCount=27
libraryProject= libraryProject=
baseVersion=15.11 baseVersion=15.11
publishVersion=15.11.26 publishVersion=15.11.26
buildCount=16 buildCount=18
baseBetaVersion=15.11.27 baseBetaVersion=15.11.27

View File

@@ -37,7 +37,16 @@
<activity <activity
android:name=".MainActivity" android:name=".MainActivity"
android:label="@string/app_name" android:label="@string/app_name"
android:exported="true"> android:exported="true"
android:launchMode="singleTask">
<intent-filter>
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.DEFAULT"/>
<category android:name="android.intent.category.BROWSABLE"/>
<data android:scheme="http"/>
<data android:scheme="https"/>
</intent-filter>
</activity> </activity>

View File

@@ -1,6 +1,7 @@
package cc.winboll.studio.winboll; package cc.winboll.studio.winboll;
import android.content.Intent; import android.content.Intent;
import android.net.Uri;
import android.os.Bundle; import android.os.Bundle;
import android.os.Handler; import android.os.Handler;
import android.os.Message; import android.os.Message;
@@ -44,6 +45,25 @@ public class MainActivity extends DrawerFragmentActivity {
addFragment(mBrowserFragment); addFragment(mBrowserFragment);
} }
showFragment(mBrowserFragment); showFragment(mBrowserFragment);
handleExternalUrl(getIntent());
}
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
handleExternalUrl(intent);
}
private void handleExternalUrl(Intent intent) {
if (intent != null && Intent.ACTION_VIEW.equals(intent.getAction())) {
Uri uri = intent.getData();
if (uri != null && mBrowserFragment != null && mBrowserFragment.getBrowserHandler() != null) {
Message msg = Message.obtain();
msg.what = BrowserFragment.MSG_OPEN_URL;
msg.obj = uri.toString();
mBrowserFragment.getBrowserHandler().sendMessage(msg);
}
}
} }
public static void sendMessage(Message msg) { public static void sendMessage(Message msg) {

View File

@@ -44,7 +44,9 @@ public class BrowserFragment extends Fragment implements View.OnClickListener, W
// 消息标识跳转首页winboll.cc // 消息标识跳转首页winboll.cc
public static final int MSG_HOMEPAGE = 1001; public static final int MSG_HOMEPAGE = 1001;
// 跳转到历史记录位置 // 跳转到历史记录位置
public static final int MSG_HISTORY_POSITION = 1002; public static final int MSG_HISTORY_POSITION = 1002;
// 打开外部应用传入的 URL
public static final int MSG_OPEN_URL = 1003;
// 自定义Handler接收应用内其他页面发送的消息 // 自定义Handler接收应用内其他页面发送的消息
private Handler mBrowserHandler; private Handler mBrowserHandler;
@@ -148,6 +150,13 @@ public class BrowserFragment extends Fragment implements View.OnClickListener, W
//showToast("已跳转至" + historyUrl); //showToast("已跳转至" + historyUrl);
} }
break; break;
case MSG_OPEN_URL:
String openUrl = (String) msg.obj;
if (openUrl != null && !openUrl.isEmpty()) {
mWinBoLLView.loadUrlSafe(openUrl);
mEtUrl.setText(openUrl);
}
break;
default: default:
break; break;
} }