Android 如何在Xamarin表单中从其他应用程序启动应用程序
我正在尝试启动一个我从另一个我正在使用的应用程序创建的应用程序。问题是我一直在互联网上搜索,发现了一些东西,但它不起作用,所以我在这里寻求帮助 这是我在我想从中启动的应用程序上所做的: 在我的xaml.cs上:Android 如何在Xamarin表单中从其他应用程序启动应用程序,android,android-intent,android-activity,xamarin.forms,Android,Android Intent,Android Activity,Xamarin.forms,我正在尝试启动一个我从另一个我正在使用的应用程序创建的应用程序。问题是我一直在互联网上搜索,发现了一些东西,但它不起作用,所以我在这里寻求帮助 这是我在我想从中启动的应用程序上所做的: 在我的xaml.cs上: public async void GoToDigDitApp(object sender, EventArgs e) { var appname = "digdit://"; var result = await Depe
public async void GoToDigDitApp(object sender, EventArgs e)
{
var appname = "digdit://";
var result = await DependencyService.Get<IAppHandler>().LaunchApp(appname);
}
public async void GoToDigDitApp(对象发送方,EventArgs e)
{
var appname=“digdit://”;
var result=wait DependencyService.Get().LaunchApp(appname);
}
我创建了一个界面:
public interface IAppHandler
{
Task<bool> LaunchApp(string uri);
}
公共接口IAppHandler
{
任务启动应用程序(字符串uri);
}
在Android项目中:
[assembly: Dependency(typeof(OpenAppAndroid))]
namespace SupervisingApp.Droid
{
[Activity(Label = "OpenAppAndroid")]
public class OpenAppAndroid : Activity, IAppHandler
{
public Task<bool> LaunchApp(string uri)
{
bool result = false;
try
{
var aUri = Android.Net.Uri.Parse(uri.ToString());
var intent = new Intent(Intent.ActionView, aUri);
Android.App.Application.Context.StartActivity(intent);
result = true;
}
catch (ActivityNotFoundException)
{
result = false;
}
return Task.FromResult(result);
}
}
}
[程序集:依赖项(typeof(OpenAppAndroid))]
命名空间管理app.Droid
{
[活动(Label=“OpenAppAndroid”)]
公共类OpenAppAndroid:活动,IAppHandler
{
公共任务启动应用程序(字符串uri)
{
布尔结果=假;
尝试
{
var aUri=Android.Net.Uri.Parse(Uri.ToString());
var intent=新intent(intent.ActionView,aUri);
Android.App.Application.Context.StartActivity(intent);
结果=真;
}
捕获(ActivityNotFoundException)
{
结果=假;
}
返回Task.FromResult(结果);
}
}
}
这是我要启动的应用程序清单:
<?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.Tab2" android:installLocation="auto">
<uses-sdk android:minSdkVersion="21" android:targetSdkVersion="28" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.CAMERA" />
<application android:label="Dig Dit" android:icon="@drawable/ic_launcher">
<activity android:icon="@drawable/ic_launcher" android:label="Dig Dit" android:name="digdit.urlentryclass">
<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="digdit" />
</intent-filter>
</activity>
</application>
</manifest>
目前,我只对安卓部分感兴趣,它似乎不起作用。我希望你们能帮助我。你们可以从xamarin.forms打开你们的应用程序
Device.BeginInvokeOnMainThread(() =>
{
Xamarin.Forms.Device.OpenUri(new Uri("digdit://555-1111"));
});
您可以从xamarin.forms打开应用程序
Device.BeginInvokeOnMainThread(() =>
{
Xamarin.Forms.Device.OpenUri(new Uri("digdit://555-1111"));
});
您可以使用
PackageManager.GetLaunchIntentForPackage
请尝试下面的代码com.companyname.app2
是app2的包名
Intent intent = PackageManager.GetLaunchIntentForPackage("com.companyname.app2");
StartActivity(intent);
更新:
创建一个接口:
public interface IDpendencyService
{
Task<bool> Launch(string stringUri);
}
公共接口IDpendencyService
{
任务启动(字符串stringUri);
}
安卓系统的实现:
public class DependencyImplementation : Activity, IDpendencyService
{
public Task<bool> Launch(string stringUri)
{
Intent intent = Android.App.Application.Context.PackageManager.GetLaunchIntentForPackage(stringUri);
if (intent != null)
{
intent.AddFlags(ActivityFlags.NewTask);
Forms.Context.StartActivity(intent);
return Task.FromResult(true);
}
else
{
return Task.FromResult(true);
}
}
}
公共类依赖实现:活动,IDpendencyService
{
公共任务启动(字符串stringUri)
{
Intent-Intent=Android.App.Application.Context.PackageManager.GetLaunchIntentForPackage(stringUri);
if(intent!=null)
{
intent.AddFlags(ActivityFlags.NewTask);
形式。语境。起始触觉(意图);
返回Task.FromResult(true);
}
其他的
{
返回Task.FromResult(true);
}
}
}
主页的使用:
<StackLayout>
<!-- Place new controls here -->
<Label
FontAttributes="Bold"
FontSize="Large"
HorizontalOptions="Center"
Text="Welcome to App1!"
VerticalOptions="CenterAndExpand" />
<Button x:Name="GotoApp2" Text="GotoApp2" Clicked="GotoApp2_Clicked"></Button>
</StackLayout>
private void GotoApp2_Clicked(object sender, EventArgs e)
{
DependencyService.Get<IDpendencyService>().Launch("com.companyname.app2");
}
已单击私有void GotoApp2(对象发送者,事件参数e)
{
DependencyService.Get().Launch(“com.companyname.app2”);
}
我已经上传到GitHub,您可以从StartAnotherApp_Xamarin.forms/App1
文件夹下载以供参考。
您可以使用
PackageManager.GetLaunchIntentForPackage
请尝试下面的代码com.companyname.app2
是app2的包名
Intent intent = PackageManager.GetLaunchIntentForPackage("com.companyname.app2");
StartActivity(intent);
更新:
创建一个接口:
public interface IDpendencyService
{
Task<bool> Launch(string stringUri);
}
公共接口IDpendencyService
{
任务启动(字符串stringUri);
}
安卓系统的实现:
public class DependencyImplementation : Activity, IDpendencyService
{
public Task<bool> Launch(string stringUri)
{
Intent intent = Android.App.Application.Context.PackageManager.GetLaunchIntentForPackage(stringUri);
if (intent != null)
{
intent.AddFlags(ActivityFlags.NewTask);
Forms.Context.StartActivity(intent);
return Task.FromResult(true);
}
else
{
return Task.FromResult(true);
}
}
}
公共类依赖实现:活动,IDpendencyService
{
公共任务启动(字符串stringUri)
{
Intent-Intent=Android.App.Application.Context.PackageManager.GetLaunchIntentForPackage(stringUri);
if(intent!=null)
{
intent.AddFlags(ActivityFlags.NewTask);
形式。语境。起始触觉(意图);
返回Task.FromResult(true);
}
其他的
{
返回Task.FromResult(true);
}
}
}
主页的使用:
<StackLayout>
<!-- Place new controls here -->
<Label
FontAttributes="Bold"
FontSize="Large"
HorizontalOptions="Center"
Text="Welcome to App1!"
VerticalOptions="CenterAndExpand" />
<Button x:Name="GotoApp2" Text="GotoApp2" Clicked="GotoApp2_Clicked"></Button>
</StackLayout>
private void GotoApp2_Clicked(object sender, EventArgs e)
{
DependencyService.Get<IDpendencyService>().Launch("com.companyname.app2");
}
已单击私有void GotoApp2(对象发送者,事件参数e)
{
DependencyService.Get().Launch(“com.companyname.app2”);
}
我已经上传到GitHub,您可以从StartAnotherApp_Xamarin.forms/App1
文件夹下载以供参考。
我收到此异常:未处理的异常:Java.Lang.NullPointerException:尝试在空对象引用上调用虚拟方法“android.content.pm.PackageManager android.content.Context.getPackageManager()”。我使用了此“com.companyname.Tab2”,但它不起作用。此应用程序Tab2需要安装在设备上。该代码在xamarin android上运行良好。如果要在xamarin.forms中执行此操作。您可以使用依赖项服务。我得到此异常:未处理的异常:Java.Lang.NullPointerException:尝试在空对象引用上调用虚拟方法“android.content.pm.PackageManager android.content.Context.getPackageManager()”。我使用了此“com.companyname.Tab2”,但它不起作用。此应用程序Tab2需要安装在设备上。该代码在xamarin android上运行良好。如果要在xamarin.forms中执行此操作。你可以使用依赖项服务。它不起作用,应用程序只是崩溃,没有例外任何想法为什么会出现这种行为?请参考此链接它不起作用,应用程序只是崩溃,没有例外任何想法为什么会出现这种行为?请参考此链接