Skip to content Skip to sidebar Skip to footer

Start An Activity From Another Activity On Xamarin Android

I found this java code to create a generic method to start any activity from other activity. public void gotoActivity(Class activityClassReference) { Intent i = new Intent(this

Solution 1:

You can write:

public void GoToActivity(Type myActivity)
{
            StartActivity(myActivity);
}

and call it like:

GoToActivity(typeof(ActivityType));

or just write:

StartActivity(typeof(ActivityType));

Solution 2:

voidbtnEntrar_Click(object sender,EventArgs e)
    { 
        var NxtAct= new Intent(this, typeof(Perguntas2));
        StartActivity(NxtAct);
    }

in my code i did this

Solution 3:

This is how i've done it in my Applicaiton

publicvoidStartAuthenticatedActivity(System.Type activityType)
    {
        var intent = new Intent(this, activityType);
        StartActivity(intent);
    }

    publicvoidStartAuthenticatedActivity<TActivity>() where TActivity: Activity
    {
        StartAuthenticatedActivity(typeof(TActivity));
    }

You can then add in the where TActivity : YourBaseActivity is a base activity that you have created

Solution 4:

Read for Android 11+ (Android 11 introduces changes related to package visibility - use the <queries> element)

You have to declare the package names for apps you want to access activities from in the manifest file of the calling app, otherwise you will get ActivityNotFoundException:

<manifest>
....
    <queries><packageandroid:name="com.companyname.yourOtherApp" /></queries></manifest>

What you want to do is to first get the PackageManager:

PackageManager pm = Android.App.Application.Context.PackageManager; Then you can look for an intent to launch the Activity with:

Intent intent = pm.GetLaunchIntentForPackage(packageName); - If that's null, you could have logic to take the user to the PlayStore to install that app.

Final code:

PackageManagerpm= Android.App.Application.Context.PackageManager;

            Intentintent= pm.GetLaunchIntentForPackage(packageName);
            if (intent != null)
            {
                intent.PutExtra(Android.Content.Intent.ExtraPackageName, "com.companyname.callingActivityName");
                intent.SetFlags(ActivityFlags.NewTask);
                Android.App.Application.Context.StartActivity(intent);
            }
            else
            {
                Android.App.Application.Context.StartActivity(newIntent(Intent.ActionView).SetData(Android.Net.Uri.Parse("https://play.google.com/store/apps/details?id=" + packageName)));
            }

Notes: Feel free to use try/catch around all of this. The line intent.PutExtra is just a sample how to add some message for the other activity. You can get it on the other side by using in OnCreate:

var text = Intent.GetStringExtra(Android.Content.Intent.ExtraPackageName);

If you want to use that in OnResume, so that your app can receive a message if redirected to after it's already running (in which case OnCreate will not be hit), you'd have to override another method first. It will allow you to get the updated value:

protectedoverridevoidOnNewIntent(Android.Content.Intent intent)
    {
        base.OnNewIntent(intent);
        // Check not required, implement your own logic. This checks if a message was passed.if (intent.Extras != null)
            Intent = intent; // Intent.GetStringExtra now has the new value
    }

Now in OnResume, you can use the same method as before and it will contain the passed value:

var text = Intent.GetStringExtra(Android.Content.Intent.ExtraPackageName);

Solution 5:

I know the question may be outdated but I have a different approach, with an external class for a general call action towards any existing activity:

publicstaticclassGeneralFunctions
    {
        publicstaticvoidchangeView(Activity _callerActivity, Type activityType)
        {
            ContextWrapper cW = new ContextWrapper(_callerActivity);
            cW.StartActivity(intent);
        }
    }

Button redirectButton = FindViewById<Button>(Resource.Id.RedirectButton);

redirectButton.Click += delegate
{
    GeneralFunctions.changeView(this, typeof(LoginView));
};

Maybe that helpful for some of you

Post a Comment for "Start An Activity From Another Activity On Xamarin Android"