Мне нужно перейти от одного приложения к другому в Xamarin.Forms.
Пробовал это, но не работал
await Xamarin.Essentials.Launcher.OpenAsync("myapp://com.companyname.myapp1");
Я пытался зарегистрировать его в манифесте, но он показывает ошибку. Но после добавления IntentFilter в основную активность он работает.
Попробуй это:
public class Test
{
public async Task OpenRideShareAsync()
{
var supportsUri = await Launcher.CanOpenAsync("myapp://");
if (supportsUri)
await Launcher.OpenAsync("myapp://com.companyname.myapp1");
}
}
Уже пробовал, но результат неверный..
то эта схема URL не зарегистрирована
Вы тестируете приложение на симуляторе или на физическом устройстве?
Я пробовал как на симуляторе, так и на физическом устройстве.
Предположим, что имя пакета приложения, которое вы хотите открыть, — com.xamarin.secondapp
.
Затем вам нужно добавить IntentFilter
и Exported =true
к MainActivity.cs
приложения, которое вы хотите открыть (com.xamarin.secondapp
).
Как следует.
[Activity(Label = "SearchBarDemos", Icon = "@mipmap/icon", Theme = "@style/MainTheme", MainLauncher = true,Exported =true, ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation)]
[
IntentFilter
(
new[] { Android.Content.Intent.ActionView },
Categories = new[]
{
Android.Content.Intent.CategoryDefault,
Android.Content.Intent.CategoryBrowsable
},
DataSchemes = new[] { "myapp" }
)
]
public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity
{
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
global::Xamarin.Forms.Forms.Init(this, savedInstanceState);
LoadApplication(new App());
}
}
Примечание: не забудьте добавить код DataSchemes = new[] { "myapp" }
.
Для текущего приложения вам нужно добавить тег queries
для приложения, которое вы хотите открыть в файле manifest.xml
.
Например:
<?xml version = "1.0" encoding = "utf-8"?>
<manifest xmlns:android = "http://schemas.android.com/apk/res/android" android:versionCode = "1" android:versionName = "1.0" package = "com.companyname.openappapp1">
<uses-sdk android:minSdkVersion = "21" android:targetSdkVersion = "33" />
<application android:label = "OpenappApp1.Android" android:theme = "@style/MainTheme">
</application>
<uses-permission android:name = "android.permission.ACCESS_NETWORK_STATE" />
<queries>
<package android:name = "com.xamarin.secondapp" />
</queries>
</manifest>
И код:
private void Button_Clicked(object sender, EventArgs e)
{
OpenSecondApp();
}
public async void OpenSecondApp()
{
var supportsUri = await Launcher.CanOpenAsync("myapp://");
if (supportsUri)
await Launcher.OpenAsync("myapp://com.xamarin.secondapp");
}
Предположим, мне нужно открыть любое другое приложение, такое как Google Chrome/Youtube, так как это возможно?
эта пользовательская схема URL-адресов зарегистрирована на устройстве?