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

Commit 9beb4e5

Browse files
committed
support uri intent launcher in android
1 parent 612acf3 commit 9beb4e5

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;
@@ -782,8 +783,13 @@ public String getDartEntrypointFunctionName() {
782783
*/
783784
@NonNull
784785
public String getInitialRoute() {
785-
if (getIntent().hasExtra(EXTRA_INITIAL_ROUTE)) {
786-
return getIntent().getStringExtra(EXTRA_INITIAL_ROUTE);
786+
Intent intent = getIntent();
787+
Uri data = intent.getData();
788+
if (data != null && data.getPath() != null && !data.getPath().isEmpty()) {
789+
return data.getPath();
790+
}
791+
if (intent.hasExtra(EXTRA_INITIAL_ROUTE)) {
792+
return intent.getStringExtra(EXTRA_INITIAL_ROUTE);
787793
}
788794

789795
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
@@ -13,6 +13,7 @@
1313

1414
import android.content.Context;
1515
import android.content.Intent;
16+
import android.net.Uri;
1617
import android.os.Bundle;
1718
import androidx.annotation.NonNull;
1819
import androidx.annotation.Nullable;
@@ -116,6 +117,26 @@ public void itCreatesNewEngineIntentWithRequestedSettings() {
116117
assertEquals(TransparencyMode.transparent, flutterActivity.getTransparencyMode());
117118
}
118119

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

0 commit comments

Comments
 (0)