Интеграция и работа с проходами .pkpass в приложении Xamarin для Android

Я разрабатываю приложение Xamarin для Android, и мне нужна возможность работать с Passes (например, PassKit pass (JSON)). Мне нужно иметь возможность перечислить все проходы в ListVew и иметь возможность открывать и отображать проход. Также иметь возможность сохранять их в кошелек, такой как PassWallet или Pass2u. Мне не нужна возможность их создавать, просто просматривайте их и сохраняйте в кошелек или выбрасывайте.

Кажется, есть пример приложения Xamarin для iOS, которое делает именно то, что мне нужно здесь, но, конечно, я необходимо иметь возможность сделать это в Xamarin Android.

Я изучал это часами, но не знаю, как добиться того, что мне нужно. JSON.net кажется подходящим способом для чтения пропусков, но это все, что мне удалось получить. Несколько примеров было бы здорово. Кто-нибудь может помочь?


person Can'tCodeWon'tCode    schedule 11.08.2014    source источник


Ответы (1)


Чтобы добавить пропуск в PassWallet, вы можете использовать следующее:

private static boolean launchPassWallet(Context applicationContext, Uri uri, boolean launchGooglePlay) {
    if (null != applicationContext) {
        PackageManager packageManager = applicationContext.getPackageManager();
        if (null != packageManager) {
            final String strPackageName = "com.attidomobile.passwallet";
            Intent startIntent = new Intent();
            startIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            startIntent.setAction(Intent.ACTION_VIEW);
            Intent passWalletLaunchIntent = packageManager
                    .getLaunchIntentForPackage(strPackageName);
            if (null == passWalletLaunchIntent) {
                // PassWallet isn't installed, open Google Play:
                if (launchGooglePlay) {

                    String strReferrer = "";

                    try {
                        strReferrer = "&referrer=" + URLEncoder.encode(uri.toString(), "UTF-8");
                    } catch (UnsupportedEncodingException e) {
                        e.printStackTrace();
                        strReferrer = "";
                    }

                    try {
                        startIntent.setData(Uri.parse("market://details?id=" + strPackageName + strReferrer));
                        applicationContext.startActivity(startIntent);
                    } catch (android.content.ActivityNotFoundException anfe) {
                        // Google Play not installed, open via website
                        startIntent.setData(Uri.parse("http://play.google.com/store/apps/details?id=" + strPackageName + strReferrer));
                        applicationContext.startActivity(startIntent);
                    }
                }
            } else {

                final String strClassName = "com.attidomobile.passwallet.activity.TicketDetailActivity";
                startIntent.setClassName(strPackageName, strClassName);
                startIntent.addCategory(Intent.CATEGORY_BROWSABLE);
                startIntent.setDataAndType(uri, "application/vnd.apple.pkpass");

                applicationContext.startActivity(startIntent);

                return true;
            }
        }
    }
    return false;
}

И пример вызова:

launchPassWallet(getApplicationContext(),Uri.parse("http://test.attidomobile.com/PassWallet/Passes/AttidoMobile.pkpass"), true); 

Вы также можете использовать URL-адрес file://, если у вас есть файл локально.

Чтобы отобразить их в списке, вам нужно разархивировать файл .pkpass, а затем проанализировать JSON для соответствующих полей.

person Andy Nugent    schedule 25.09.2014
comment
И вопрос: как добавить список пропусков? Теперь можно добавить только 1 проход за 1 раз. - person RoShan Shan; 25.01.2017