Skip to content
This repository was archived by the owner on Feb 25, 2025. It is now read-only.

Commit 3909e53

Browse files
committed
support uri intent launcher in android
1 parent aa96b1a commit 3909e53

File tree

2 files changed

+29
-2
lines changed

2 files changed

+29
-2
lines changed

shell/platform/android/io/flutter/embedding/android/FlutterActivity.java

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import android.graphics.Color;
2727
import android.graphics.drawable.ColorDrawable;
2828
import android.graphics.drawable.Drawable;
29+
import android.net.Uri;
2930
import android.os.Build;
3031
import android.os.Bundle;
3132
import android.view.View;
@@ -736,8 +737,13 @@ public String getDartEntrypointFunctionName() {
736737
*/
737738
@NonNull
738739
public String getInitialRoute() {
739-
if (getIntent().hasExtra(EXTRA_INITIAL_ROUTE)) {
740-
return getIntent().getStringExtra(EXTRA_INITIAL_ROUTE);
740+
Intent intent = getIntent();
741+
Uri data = intent.getData();
742+
if (data != null && data.getPath() != null && !data.getPath().isEmpty()) {
743+
return data.getPath();
744+
}
745+
if (intent.hasExtra(EXTRA_INITIAL_ROUTE)) {
746+
return intent.getStringExtra(EXTRA_INITIAL_ROUTE);
741747
}
742748

743749
try {

shell/platform/android/test/io/flutter/embedding/android/FlutterActivityTest.java

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010

1111
import android.content.Context;
1212
import android.content.Intent;
13+
import android.net.Uri;
1314
import android.os.Bundle;
1415
import androidx.annotation.NonNull;
1516
import androidx.annotation.Nullable;
@@ -112,6 +113,26 @@ public void itCreatesNewEngineIntentWithRequestedSettings() {
112113
assertEquals(TransparencyMode.transparent, flutterActivity.getTransparencyMode());
113114
}
114115

116+
@Test
117+
public void itCreatesNewEngineIntentWithLaunchUri() {
118+
Intent intent = FlutterActivity.createDefaultIntent(RuntimeEnvironment.application);
119+
intent.setData(Uri.parse("http://myApp/custom/route"));
120+
ActivityController<FlutterActivity> activityController =
121+
Robolectric.buildActivity(FlutterActivity.class, intent);
122+
FlutterActivity flutterActivity = activityController.get();
123+
flutterActivity.setDelegate(new FlutterActivityAndFragmentDelegate(flutterActivity));
124+
125+
assertEquals("main", flutterActivity.getDartEntrypointFunctionName());
126+
assertEquals("/custom/route", flutterActivity.getInitialRoute());
127+
assertArrayEquals(new String[] {}, flutterActivity.getFlutterShellArgs().toArray());
128+
assertTrue(flutterActivity.shouldAttachEngineToActivity());
129+
assertNull(flutterActivity.getCachedEngineId());
130+
assertTrue(flutterActivity.shouldDestroyEngineWithHost());
131+
assertEquals(BackgroundMode.opaque, flutterActivity.getBackgroundMode());
132+
assertEquals(RenderMode.surface, flutterActivity.getRenderMode());
133+
assertEquals(TransparencyMode.opaque, flutterActivity.getTransparencyMode());
134+
}
135+
115136
@Test
116137
public void itCreatesCachedEngineIntentThatDoesNotDestroyTheEngine() {
117138
Intent intent =

0 commit comments

Comments
 (0)