Как открыть Google Play книги с помощью кнопки, используя Xamarin.Forms?

80
7

Я работаю над приложением в Xamarin.Forms, у которого есть кнопка для книг. Я хочу, чтобы он открывал iBooks, если ОС - iOS и Google Play книги, если это андроид

У меня есть часть iBooks Part, но как мне открыть игровые книги Google с помощью кнопки, расположенной в Android-версии приложения?

Вот мой код xaml:

<StackLayout Orientation="Horizontal" MinimumHeightRequest="30" VerticalOptions="FillAndExpand" HorizontalOptions="FillAndExpand">
<Button Image="books.png" HorizontalOptions="CenterAndExpand" BackgroundColor="Transparent" Clicked="OpenBooks" />
<Button Image="settings.png" HorizontalOptions="EndAndExpand" BorderColor="Transparent" BackgroundColor="Transparent" Clicked="gotosettings" />
</StackLayout>

Код Heres My С#:

public void OpenBooks(object sender, EventArgs e)
{
switch (Device.OS)
{
case TargetPlatform.iOS:
Device.OpenUri(new Uri("itms-books"));
break;
case TargetPlatform.Android:
//open google play books code here
break;
}
}

любая помощь будет потрясающей!

Заранее спасибо!

спросил(а) 2017-01-05T21:02:00+03:00 3 года, 8 месяцев назад
1
Решение
57

На платформе Android вы должны знать имя пакета книг в Google Play и проверить, установлен ли он уже.

В части PCL вы не можете добиться этого с помощью Device.OpenUri("packagename");

Вы должны использовать службу зависимостей, чтобы открыть приложение для книг Google Play, а имя пакета приложений в Google Play - com.google.android.apps.books:

В стороне PCL определите интерфейс:

namespace OpenBooks_Demo
{
public interface OpenBookInterface
{
void openBooks();
}
}

В стороне andorid реализует интерфейс:

[assembly: Xamarin.Forms.Dependency(typeof(OpenBookImp))]
namespace OpenBooks_Demo.Droid
{
public class OpenBookImp : Java.Lang.Object, OpenBookInterface
{
public OpenBookImp() { }
public void openBooks()
{
var ctx = Forms.Context;

Intent launchIntent = new Intent();
launchIntent = ctx.PackageManager.GetLaunchIntentForPackage("com.google.android.apps.books");
if (launchIntent != null)
{
ctx.StartActivity(launchIntent);//null pointer check in case package name was not found
}
else
{
try
{
ctx.StartActivity(new Intent(Intent.ActionView, Android.Net.Uri.Parse("market://details?id=" + "com.google.android.apps.books")));
}
catch (Exception e)
{
ctx.StartActivity(new Intent(Intent.ActionView, Android.Net.Uri.Parse("https://play.google.com/store/apps/details?id=" + "com.google.android.apps.books")));
}
}
}
}
}

Затем вызовите метод openBooks на стороне PCL:

public void OpenBooks(object sender, EventArgs e)
{
switch (Device.OS)
{
case TargetPlatform.iOS:
Device.OpenUri(new Uri("itms-books"));
break;
case TargetPlatform.Android:
DependencyService.Get<OpenBookInterface>().openBooks();
break;
}
}

В моем устройстве Android я установил книги для игры в google: enter image description here

ответил(а) 2017-01-06T09:51:00+03:00 3 года, 8 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема