protected override void OnCreate (Bundle bundle)
		{
			base.OnCreate (bundle);

			// Set our view from the "main" layout resource
			SetContentView (Resource.Layout.Main);

			// Get our button from the layout resource,
			// and attach an event to it
			var registerButton = FindViewById<Button> (Resource.Id.registerButton);
			var unregisterButton = FindViewById<Button> (Resource.Id.unregisterButton);
			
			registerButton.Click += delegate {
				const string senders = "<Google Cloud Messaging Sender ID>";
				var intent = new Intent("com.google.android.c2dm.intent.REGISTER");
				intent.SetPackage("com.google.android.gsf");
				intent.PutExtra("app", PendingIntent.GetBroadcast(this, 0, new Intent(), 0));
				intent.PutExtra("sender", senders);
				StartService(intent);
			};

			unregisterButton.Click += delegate {
				var intent = new Intent("com.google.android.c2dm.intent.UNREGISTER");
				intent.PutExtra("app", PendingIntent.GetBroadcast(this, 0, new Intent(), 0));
				StartService(intent);
			};
		}
        // Launch the device browser so the user can complete the checkout.
        private void OnWebCheckoutButtonClicked(object sender, EventArgs e)
        {
            var intent = new Intent(Intent.ActionView);
            intent.AddFlags(ActivityFlags.NewTask | ActivityFlags.ClearTask);
            intent.SetData(Android.Net.Uri.Parse(SampleApplication.Checkout.WebUrl));

            try
            {
                intent.SetPackage("com.android.chrome");
                StartActivity(intent);
            }
            catch (Exception)
            {
                try
                {
                    // Chrome could not be opened, attempt to us other launcher
                    intent.SetPackage(null);
                    StartActivity(intent);
                }
                catch (Exception)
                {
                    OnError(GetString(Resource.String.checkout_error));
                }
            }
        }
 // http://stackoverflow.com/questions/6827407/how-to-customize-share-intent-in-android/9229654#9229654
 private void initShareItent(String type)
 {
     bool found = false;
     Intent share = new Intent(Android.Content.Intent.ActionSend);
     share.SetType("image/jpeg");
     // gets the list of intents that can be loaded.    
     List<ResolveInfo> resInfo = PackageManager.QueryIntentActivities(share, 0).ToList();
     if (resInfo.Count > 0) {
         foreach (ResolveInfo info in resInfo) {
             if (info.ActivityInfo.PackageName.ToLower().Contains(type) ||
                 info.ActivityInfo.Name.ToLower().Contains(type)) {
                 share.PutExtra(Intent.ExtraSubject, "[Corpy] hi");
                 share.PutExtra(Intent.ExtraText, "Hi " + employee.Firstname);
                 //                    share.PutExtra(Intent.EXTRA_STREAM, Uri.fromFile(new File(myPath)) );
                 // class atrribute               
                 share.SetPackage(info.ActivityInfo.PackageName);
                 found = true;
                 break;
             }
         }
         if (!found)
             return;
         StartActivity(Intent.CreateChooser(share, "Select"));
     }
 } 
        protected override void OnCreate(Bundle bundle)
        {
            base.OnCreate (bundle);

            // Set our view from the "main" layout resource
            SetContentView (Resource.Layout.Main);

            // Get our button from the layout resource,
            // and attach an event to it
            Button btnGetRegID = FindViewById<Button> (Resource.Id.btnGetRegID);

            string senders = "374823337115";
            Intent intent = new Intent("com.google.android.c2dm.intent.REGISTER");
            intent.SetPackage("com.google.android.gsf");
            intent.PutExtra("app", PendingIntent.GetBroadcast(this, 0, new Intent(), 0));
            intent.PutExtra("sender", senders);
            this.StartService(intent);

            txtRegID = FindViewById<TextView> (Resource.Id.txtRegID);

            btnGetRegID.Click += delegate {

                txtRegID.Text = appRegID;
            };
        }
 public void Connect()
 {
     var serviceIntent = new Intent ("ir.cafebazaar.pardakht.InAppBillingService.BIND");
     serviceIntent.SetPackage("com.farsitel.bazaar");
     int intentServicesCount = _activity.PackageManager.QueryIntentServices (serviceIntent, 0).Count;
     if (intentServicesCount != 0) {
         _activity.BindService (serviceIntent, this, Bind.AutoCreate);
     }
 }
Example #6
0
 private void RegisterForGCM()
 {
     string senders = Constants.GoogleConsoleProjectId;
     Intent intent = new Intent("com.google.android.c2dm.intent.REGISTER");
     intent.SetPackage("com.google.android.gsf");
     intent.PutExtra("app", PendingIntent.GetBroadcast(this, 0, new Intent(), 0));
     intent.PutExtra("sender", senders);
     StartService(intent);
 }
        public override void OnReceive(Context context, Intent intent)
        {
            if (intent.Action != AudioManager.ActionAudioBecomingNoisy)
                return;

            //signal the service to pause!
            var pauseIntent = new Intent(MediaServiceBase.ActionPause);
            pauseIntent.SetPackage(context.PackageName);
            context.StartService(pauseIntent);
        }
        // main class
        public void StartService()
        {
            string senders = "922250740088";
            Intent intent = new Intent("com.google.android.c2dm.intent.REGISTER");

            intent.SetPackage("com.google.android.gsf");
            intent.PutExtra("app", PendingIntent.GetBroadcast(Application.Context, 0, new Intent(), 0));
            intent.PutExtra("sender", senders);
            Application.Context.StartService(intent);
        }
Example #9
0
        public void HandleClick()
        {
            Intent i = new Intent(Strings.ActionEntryActionSelected);
            i.SetPackage(_pluginPackage);
            i.PutExtra(Strings.ExtraActionData, _bundleExtra);
            i.PutExtra(Strings.ExtraFieldId, _fieldId);
            i.PutExtra(Strings.ExtraSender, _activity.PackageName);

            _activity.AddEntryToIntent(i);

            _activity.SendBroadcast(i);
        }
Example #10
0
        private void BroadcastNewTotp(string totp)
        {
            Intent i = new Intent(Strings.ActionSetEntryField);
            i.PutExtra(Strings.ExtraAccessToken,new PluginDatabase(_context).GetInternalToken());
            i.SetPackage(_context.PackageName);
            i.PutExtra(Strings.ExtraSender, _context.PackageName);
            i.PutExtra(Strings.ExtraFieldValue, totp);
            i.PutExtra(Strings.ExtraEntryId, App.Kp2a.GetDb().LastOpenedEntry.Entry.Uuid.ToHexString());
            i.PutExtra(Strings.ExtraFieldId, _totp);
            i.PutExtra(Strings.ExtraFieldProtected, true);

            _context.SendBroadcast(i);
        }
Example #11
0
        public void TryOpenMap(double latitude, double longitude, string findOption, bool flagActivity = false)
        {
            Android.Net.Uri intentUri = Android.Net.Uri.Parse
                                            ($"geo:{latitude.ToString(CultureInfo.InvariantCulture)},{longitude.ToString(CultureInfo.InvariantCulture)}?q={findOption}");

            Android.Content.Intent mapIntent = new Android.Content.Intent(Android.Content.Intent.ActionView, intentUri);
            mapIntent.SetPackage("com.google.android.apps.maps");
            if (flagActivity)
            {
                mapIntent.AddFlags(ActivityFlags.NewTask);
            }
            Android.App.Application.Context.StartActivity(mapIntent);
        }
		public async Task RegisterForRemoteNotificationsAsync()
		{
			var context = Application.Context;

			var senderId = DonkyAndroid.Settings.GcmSenderId 
				?? _configurationManager.GetValue<string>("DefaultGCMSenderId");
			Logger.Instance.LogInformation("Registering for GCM with SenderId {0}", senderId);
			var senders = senderId;
			var intent = new Intent("com.google.android.c2dm.intent.REGISTER");
			intent.SetPackage("com.google.android.gsf");
			intent.PutExtra("app", PendingIntent.GetBroadcast(context, 0, new Intent(), 0));
			intent.PutExtra("sender", senders);
			context.StartService(intent);
		}
Example #13
0
 public override void OnViewCreated(View view, Bundle savedInstanceState)
 {
     base.OnViewCreated (view, savedInstanceState);
     ListView.ItemLongClick += (sender, e) => {
         var artist = ((ArtistAdapter)ListAdapter).GetArtistData (e.Position);
         var name = artist.Name.Replace (' ', '_');
         name = Android.Net.Uri.Encode (name);
         var uri = "http://www.rdio.com/artist/" + name;
         var intent = new Intent (Intent.ActionView,
                                  Android.Net.Uri.Parse (uri));
         intent.SetPackage ("com.rdio.android.ui");
         StartActivity (intent);
     };
 }
        public static void RegisterService()
        {
            var keyStore = new LocalStore();
            var interval = keyStore.GetString(Constants.Keys.Interval);
            if (string.IsNullOrEmpty(interval))
                interval = "1";

            var intervalTime = 60000 * int.Parse(interval);

            var serviceIntent = new Intent(Constants.GPSServiceIntent);
            serviceIntent.SetPackage(Application.Context.PackageName);

            var alarm = (AlarmManager)Application.Context.GetSystemService(Context.AlarmService);
            var pendingServiceIntent = PendingIntent.GetService(Application.Context, 0, serviceIntent, PendingIntentFlags.CancelCurrent);
            alarm.SetRepeating(AlarmType.Rtc, 0, intervalTime, pendingServiceIntent);
        }
 public void Connect()
 {
     Intent intent = new Intent("ir.cafebazaar.pardakht.InAppBillingService.BIND");
     intent.SetPackage("com.farsitel.bazaar");
     IList<ResolveInfo> list = this._activity.PackageManager.QueryIntentServices(intent, 0);
     if (list == null)
     {
         this.RaiseOnInAppBillingError(InAppBillingErrorType.BillingNotSupported, "Unable to bind with com.android.vending.billing.InAppBillingService API.");
         this.Connected = false;
     }
     else if (list.Count != 0)
     {
         this._activity.BindService(intent, this, Bind.AutoCreate);
     }
     else
     {
         this.RaiseOnInAppBillingError(InAppBillingErrorType.BillingNotSupported, "Unable to access the com.android.vending service.");
         this.Connected = false;
     }
 }
Example #16
0
        protected override void OnHandleIntent(Intent intent)
        {
            try
            {
                var context = ApplicationContext;
                var action = intent.Action;

                switch (action)
                {
                    case "com.google.android.c2dm.intent.REGISTRATION":
                        var senders = "MySenderID";
                        var regIntent = new Intent("com.google.android.c2dm.intent.REGISTER");
                        regIntent.SetPackage("com.google.android.gsf");
                        regIntent.PutExtra("app", PendingIntent.GetBroadcast(context, 0, new Intent(), 0));
                        regIntent.PutExtra("sender", senders);
                        context.StartService(regIntent);
                        break;
                    case "com.google.android.c2dm.UNREGISTER":
                        var unregIntent = new Intent("com.google.android.c2dm.intent.UNREGISTER");
                        unregIntent.PutExtra("app", PendingIntent.GetBroadcast(context, 0, new Intent(), 0));
                        context.StartService(regIntent);
                        break;
                    case "com.google.android.c2dm.intent.RECEIVE":
                        var eventid = intent.GetStringExtra("eventid");
                        var eventname = intent.GetStringExtra("eventname");
                        if (!string.IsNullOrEmpty(eventname) &&)
                            App.Self.ChangedClass.BroadcastIt(eventname);
                        break;
                }
            }
            finally
            {
                lock (LOCK)
                {
                    if (wakeLock != null)
                        wakeLock.Release();
                }
            }
        }
Example #17
0
		internal static void internalUnRegister(Context context)
		{
			Logger.Debug("Unregistering app " + context.PackageName);

			var intent = new Intent(Constants.INTENT_TO_GCM_UNREGISTRATION);
			intent.SetPackage(GSF_PACKAGE);
			intent.PutExtra(Constants.EXTRA_APPLICATION_PENDING_INTENT,
				PendingIntent.GetBroadcast(context, 0, new Intent(), 0));

			context.StartService(intent);
		}
Example #18
0
		internal static void internalRegister(Context context, params string[] senderIds)
		{
			if (senderIds == null || senderIds.Length <= 0)
				throw new ArgumentException("No senderIds");

			var senders = string.Join(",", senderIds);

			Logger.Debug("Registering app " + context.PackageName + " of senders " + senders);

			var intent = new Intent(Constants.INTENT_TO_GCM_REGISTRATION);
			intent.SetPackage(GSF_PACKAGE);
			intent.PutExtra(Constants.EXTRA_APPLICATION_PENDING_INTENT,
				PendingIntent.GetBroadcast(context, 0, new Intent(), 0));
			intent.PutExtra(Constants.EXTRA_SENDER, senders);

			context.StartService(intent);
		}
Example #19
0
		private static void CheckReceiver(Context context, HashSet<string> allowedReceivers, string action)
		{
			var pm = context.PackageManager;
			var packageName = context.PackageName;

			var intent = new Intent(action);
			intent.SetPackage(packageName);

			var receivers = pm.QueryBroadcastReceivers(intent, PackageInfoFlags.IntentFilters);

			if (receivers == null || receivers.Count <= 0)
				throw new InvalidOperationException("No receivers for action " + action);

			Logger.Debug("Found " + receivers.Count + " receivers for action " + action);

			foreach (var receiver in receivers)
			{
				var name = receiver.ActivityInfo.Name;
				if (!allowedReceivers.Contains(name))
					throw new InvalidOperationException("Receiver " + name + " is not set with permission " + Constants.PERMISSION_GCM_INTENTS);
			}
		}
		//The id for the video is the part after /watch?v=
		//So for example: id = "dQw4w9WgXcQ";

		//Apparently, from the testing on 04.05.16, we got replies that said the video loading was slow to react. Uhm.. ok?
		private void PlayYoutubeVideo(string id)
		{
                Toast.MakeText(Activity, Resource.String.OpenVideo, ToastLength.Long).Show();
			try
			{
				Intent intent = new Intent(Intent.ActionSearch);
				intent.SetPackage("com.google.android.youtube");
				intent.PutExtra("query", id);
				intent.SetFlags(ActivityFlags.NewTask);
				StartActivity(intent);
			}
			catch
			{

				Intent intent = new Intent(Intent.ActionView, Android.Net.Uri.Parse("http://www.youtube.com/results?search_query=" + id));
				StartActivity(intent);
			}
		}
Example #21
0
 private PendingIntent GetPendingIntent(string intentText, int descResId)
 {
     PendingIntent pending;
     Intent intent = new Intent(intentText);
     intent.SetPackage(_ctx.PackageName);
     pending = PendingIntent.GetBroadcast(_ctx, descResId, intent, PendingIntentFlags.CancelCurrent);
     return pending;
 }
Example #22
0
 public static void TriggerRequest(Context ctx, string pkgName, PluginDatabase pluginDatabase)
 {
     try
     {
         Intent triggerIntent = new Intent(Strings.ActionTriggerRequestAccess);
         triggerIntent.SetPackage(pkgName);
         triggerIntent.PutExtra(Strings.ExtraSender, ctx.PackageName);
         string requestToken = pluginDatabase.GetRequestToken(pkgName);
         triggerIntent.PutExtra(Strings.ExtraRequestToken, requestToken);
         Android.Util.Log.Debug(_tag, "Request token: " + requestToken);
         ctx.SendBroadcast(triggerIntent);
     }
     catch (Exception e)
     {
     }
 }
Example #23
0
        public void SetEnabled(string pluginPackage, bool enabled)
        {
            if (enabled)
            {
                string accessToken = Guid.NewGuid().ToString();

                Intent i = new Intent(Strings.ActionReceiveAccess);
                i.SetPackage(pluginPackage);

                i.PutExtra(Strings.ExtraSender, _ctx.PackageName);
                i.PutExtra(Strings.ExtraRequestToken, GetPreferencesForPlugin(pluginPackage).GetString(_requesttoken, null));
                i.PutExtra(Strings.ExtraAccessToken, accessToken);
                _ctx.SendBroadcast(i);

                StorePlugin(pluginPackage, accessToken, GetPluginScopes(pluginPackage));
            }
            else
            {
                Intent i = new Intent(Strings.ActionRevokeAccess);
                i.SetPackage(pluginPackage);
                i.PutExtra(Strings.ExtraSender, _ctx.PackageName);
                i.PutExtra(Strings.ExtraRequestToken, GetPreferencesForPlugin(pluginPackage).GetString(_requesttoken, null));
                _ctx.SendBroadcast(i);
                StorePlugin(pluginPackage, null, GetPluginScopes(pluginPackage));
            }
        }
Example #24
0
        private void NotifyPluginsOnOpen()
        {
            Intent i = new Intent(Strings.ActionOpenEntry);
            i.PutExtra(Strings.ExtraSender, PackageName);
            AddEntryToIntent(i);

            foreach (var plugin in new PluginDatabase(this).GetPluginsWithAcceptedScope(Strings.ScopeCurrentEntry))
            {
                i.SetPackage(plugin);
                SendBroadcast(i);
            }

            new Kp2aTotp().OnOpenEntry();
        }
Example #25
0
 private void NotifyPluginsOnClose()
 {
     Intent i = new Intent(Strings.ActionCloseEntryView);
     i.PutExtra(Strings.ExtraSender, PackageName);
     foreach (var plugin in new PluginDatabase(this).GetPluginsWithAcceptedScope(Strings.ScopeCurrentEntry))
     {
         i.SetPackage(plugin);
         SendBroadcast(i);
     }
 }
Example #26
0
        private void AddPluginAction(string pluginPackage, string fieldId, string popupItemId, string displayText, int iconId, Bundle bundleExtra)
        {
            if (fieldId != null)
            {
                try
                {
                    //create a new popup item for the plugin action:
                    var newPopup = new PluginPopupMenuItem(this, pluginPackage, fieldId, popupItemId, displayText, iconId, bundleExtra);
                    //see if we already have a popup item for this field with the same item id
                    var popupsForField = _popupMenuItems[fieldId];
                    var popupItemPos = popupsForField.FindIndex(0,
                                                            item =>
                                                            (item is PluginPopupMenuItem) &&
                                                            ((PluginPopupMenuItem)item).PopupItemId == popupItemId);

                    //replace existing or add
                    if (popupItemPos >= 0)
                    {
                        popupsForField[popupItemPos] = newPopup;
                    }
                    else
                    {
                        popupsForField.Add(newPopup);
                    }
                }
                catch (Exception e)
                {
                    Kp2aLog.Log(e.ToString());
                }

            }
            else
            {
                //we need to add an option to the  menu.
                //As it is not sure that OnCreateOptionsMenu was called yet, we cannot access _menu without a check:

                Intent i = new Intent(Strings.ActionEntryActionSelected);
                i.SetPackage(pluginPackage);
                i.PutExtra(Strings.ExtraActionData, bundleExtra);
                i.PutExtra(Strings.ExtraSender, PackageName);
                PluginHost.AddEntryToIntent(i, App.Kp2a.GetDb().LastOpenedEntry);

                var menuOption = new PluginMenuOption()
                    {
                        DisplayText = displayText,
                        Icon = PackageManager.GetResourcesForApplication(pluginPackage).GetDrawable(iconId),
                        Intent = i
                    };

                if (_menu != null)
                {
                    AddMenuOption(menuOption);
                }
                else
                {
                    lock (_pendingMenuOptions)
                    {
                        _pendingMenuOptions.Add(menuOption);
                    }

                }

            }
        }
        /// <summary>
        /// Checks if the user should have access to the app. Binds the service if necessary.
        /// </summary>
        /// <param name="callback">
        /// The callback.
        /// </param>
        public void CheckAccess(ILicenseCheckerCallback callback)
        {
            lock (this.locker)
            {
                // If we have a valid recent LICENSED response, we can skip asking Market/Play.
                if (this.policy.AllowAccess())
                {
                    System.Diagnostics.Debug.WriteLine("Using cached license response");
                    callback.Allow(PolicyServerResponse.Licensed);
                }
                else
                {
                    var validator = new LicenseValidator(
                        this.policy, 
                        new NullDeviceLimiter(), 
                        callback, 
                        GenerateNumberUsedOnce(), 
                        this.packageName, 
                        this.versionCode);

                    if (this.licensingService == null)
                    {
                        try
                        {
                            var i = new Intent(LicensingServiceIntentString);
                            i.SetPackage(LicensingServicePackageString);

                            if (this.context.BindService(i, this, Bind.AutoCreate))
                            {
                                this.pendingChecks.Enqueue(validator);
                            }
                            else
                            {
                                Debug.WriteLine("Could not bind to service.");
                                this.HandleServiceConnectionError(validator);
                            }
                        }
                        catch (Java.Lang.SecurityException)
                        {
                            callback.ApplicationError(CallbackErrorCode.MissingPermission);
                        }
                        catch (Exception ex)
                        {
                            Debug.WriteLine(ex.StackTrace);
                        }
                    }
                    else
                    {
                        this.pendingChecks.Enqueue(validator);
                        this.RunChecks();
                    }
                }
            }
        }
Example #28
0
        public override void OnReceive(Context context, Intent intent)
        {
            PluginDatabase pluginDb = new PluginDatabase(context);
            if (intent.Action == Strings.ActionRequestAccess)
            {
                var senderPackage = intent.GetStringExtra(Strings.ExtraSender);
                var requestToken = intent.GetStringExtra(Strings.ExtraRequestToken);

                var requestedScopes = intent.GetStringArrayListExtra(Strings.ExtraScopes);

                if (!AreScopesValid(requestedScopes))
                {
                    return;
                }

                if (pluginDb.GetRequestToken(senderPackage) != requestToken)
                {
                    Log.Warn(_tag, "Invalid requestToken!");
                    return;
                }
                string currentAccessToken = pluginDb.GetAccessToken(senderPackage);
                if ((currentAccessToken != null)
                    && (AccessManager.IsSubset(requestedScopes,
                                           pluginDb.GetPluginScopes(senderPackage))))
                {
                    //permission already there.
                    var i = new Intent(Strings.ActionReceiveAccess);
                    i.PutExtra(Strings.ExtraSender, context.PackageName);
                    i.PutExtra(Strings.ExtraAccessToken, currentAccessToken);
                    //TODO: Plugin should verify requestToken to make sure it doesn't receive accessTokens from malicious apps
                    i.PutExtra(Strings.ExtraRequestToken, requestToken);
                    i.SetPackage(senderPackage);
                    context.SendBroadcast(i);

                    Log.Debug(_tag, "Plugin " + senderPackage + " enabled.");
                }
                else
                {
                    //store that scope was requested but not yet approved (=> accessToken = null)
                    pluginDb.StorePlugin(senderPackage, null, requestedScopes);

                    Log.Debug(_tag, "Plugin " + senderPackage + " not enabled.");

                    //see if the plugin has an access token
                    string accessToken = intent.GetStringExtra(Strings.ExtraAccessToken);
                    if (accessToken != null)
                    {
                        //notify plugin that access token is no longer valid or sufficient
                        Intent i = new Intent(Strings.ActionRevokeAccess);
                        i.PutExtra(Strings.ExtraSender, context.PackageName);
                        i.PutExtra(Strings.ExtraAccessToken, accessToken);
                        i.SetPackage(senderPackage);
                        context.SendBroadcast(i);
                        Log.Warn(_tag, "Access token of plugin " + senderPackage + " not (or no more) valid.");
                    }

                }
                if (OnReceivedRequest != null)
                    OnReceivedRequest(this, new PluginHostEventArgs() { Package = senderPackage });

            }
        }
      private void Send() {
        Intent intent = new Intent(IntentRegisterAction);
        intent.SetPackage("com.google.android.gsf");
        intent.PutExtra("sender", senderId);
        intent.PutExtra("app", appIntent);

        ComponentName name = null;
        try {
          name = context.StartService(intent);
        } catch (Exception) {
          // Do nothing.
        }
      }
Example #30
0
        private void NotifyPluginsOnModification(string fieldId)
        {
            Intent i = new Intent(Strings.ActionEntryOutputModified);
            i.PutExtra(Strings.ExtraSender, PackageName);
            i.PutExtra(Strings.ExtraFieldId, fieldId);
            AddEntryToIntent(i);

            foreach (var plugin in new PluginDatabase(this).GetPluginsWithAcceptedScope(Strings.ScopeCurrentEntry))
            {
                i.SetPackage(plugin);
                SendBroadcast(i);
            }
        }
Example #31
0
		public async Task<NavigationResult> Navigate (AppLink appLink, JsonObject extras, RefererAppLink refererAppLink)
		{
			var context = Android.App.Application.Context;
			var pm = context.PackageManager;

			var appLinkDataJson = JsonSerializeAppLinkData (appLink, extras);

			Intent eligibleTargetIntent = null;

			foreach (var t in appLink.Targets) {
				var target = t as AndroidAppLinkTarget;

				if (target == null)
					continue;

				var targetIntent = new Intent (Intent.ActionView);

				if (target.Url != null)
					targetIntent.SetData (Android.Net.Uri.Parse(target.Url.ToString()));
				else
					targetIntent.SetData (Android.Net.Uri.Parse(appLink.SourceUrl.ToString()));

				targetIntent.SetPackage (target.Package);

				if (target.Class != null)
					targetIntent.SetClassName (target.Package, target.Class);

				targetIntent.PutExtra (KEY_APP_LINK_DATA, appLinkDataJson);

				var resolved = pm.ResolveActivity (targetIntent, Android.Content.PM.PackageInfoFlags.MatchDefaultOnly);
				if (resolved != null) {
					eligibleTargetIntent = targetIntent;
					break;
				}
			}

			if (eligibleTargetIntent != null) {
			
				eligibleTargetIntent.AddFlags (ActivityFlags.NewTask);
				context.StartActivity (eligibleTargetIntent);

				return NavigationResult.App;
			}

			// Fall back to the web if it's available
			if (appLink.WebUrl != null) {

                var webUrl = BuildUrl(appLink, appLink.WebUrl, extras);

				var handled = RaiseWillNavigateToWebUrl (webUrl);

				if (!handled) {
					Intent launchBrowserIntent = new Intent (Intent.ActionView, Android.Net.Uri.Parse (webUrl.ToString ()));
					launchBrowserIntent.AddFlags (ActivityFlags.NewTask);
					context.StartActivity (launchBrowserIntent);
				}

				return NavigationResult.Web;
			}

			return NavigationResult.Failed;
		}