0

According to this link (Starting AlarmManager in Android (C#)) I can see "Time Up... Now Vibrating !!!". When my app is closed, I can see "Time Up... Now Vibrating !!!". So far everything is fine.

My questions:

1. Whit AlramManager, How to Check an app is open or closed?

2. If the app is closed, how can I open it?

EDITED:

I edited my app but when my app is not in debug mode -that is closed- I again see "App is running". Why? I want to open my app when it is closed.

namespace AlarmManage
{
    [BroadcastReceiver(Enabled = true)]
    public class MyBroadcastReceiver : BroadcastReceiver 
    {
        private static bool activityVisible;

        public override void OnReceive(Context context, Intent intent)
        {
            Toast.MakeText(context, "Time Up... Now Vibrating !!!",
                    ToastLength.Long).Show();
            Vibrator vibrator = (Vibrator)context
                    .GetSystemService(Context.VibratorService);
            vibrator.Vibrate(2000);
            //Application.Context.StartActivity(new Intent(context, typeof(MainActivity)));

            if (CheckRunningApplicationReceiver.isAppRunning(context, "AlarmManage.AlarmManage"))
            {
                // App is running
                Toast.MakeText(context, "App is running", ToastLength.Long).Show();
            }
            else
            {
                // App is not running
                // intent to lounch ur app. 
                Toast.MakeText(context, "App is not running", ToastLength.Long).Show();
            }
        }
    }
}


namespace AlarmManage
{
    public class CheckRunningApplicationReceiver
    {
        static bool flag = false;
        public static bool isAppRunning(Context context, String packageName)
        {
            ActivityManager activityManager = (ActivityManager)context.GetSystemService(Context.ActivityService);
            //List<Android.App.ActivityManager.RunningAppProcessInfo> processInfo = activityManager.RunningAppProcesses;
            for (int i = 0; i < activityManager.RunningAppProcesses.Count; i++)
            {
                if (activityManager.RunningAppProcesses[i].ProcessName.Equals("AlarmManage.AlarmManage"))   // make sure your package address of that specific app.
                {
                    //Another App is running
                    Toast.MakeText(context, activityManager.RunningAppProcesses[i].ProcessName.ToString(), ToastLength.Long).Show();
                    flag = true;
                    return flag;
                }
            }
            return flag;
        }
    }
}

EDITED:

I saw this link (How to check if activity is in foreground or in visible background?)

I edited my code and now I have correct output.

namespace AlarmManage
{
    public class MyApplication : Application
    {
        private static bool activityVisible;
        public static bool isActivityVisible()
        {
            return activityVisible;
        }

        public static void activityResumed()
        {
            activityVisible = true;
        }

        public static void activityPaused()
        {
            activityVisible = false;
        }
    }
}



namespace AlarmManage
{
    [BroadcastReceiver(Enabled = true)]
    public class MyBroadcastReceiver : BroadcastReceiver 
    {
        private static bool activityVisible;

        public override void OnReceive(Context context, Intent intent)
        {
            Toast.MakeText(context, "Time Up... Now Vibrating !!!",
                    ToastLength.Long).Show();
            Vibrator vibrator = (Vibrator)context
                    .GetSystemService(Context.VibratorService);
            vibrator.Vibrate(2000);

            if (MyApplication.isActivityVisible() == true)
            {
            }
            else if (MyApplication.isActivityVisible() == false)
            {
                intent = context.PackageManager.GetLaunchIntentForPackage(context.PackageName);
                intent.AddFlags(ActivityFlags.ClearTop);
                context.StartActivity(intent);
            }
        }
    }
}
Community
  • 1
  • 1
arz
  • 49
  • 1
  • 10

1 Answers1

0

1] make one method in util class

 public static boolean isAppRunning(final Context context, final String packageName) {
            final ActivityManager activityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
            final List<ActivityManager.RunningAppProcessInfo> procInfos = activityManager.getRunningAppProcesses();
            if (procInfos != null)
            {
                for (final ActivityManager.RunningAppProcessInfo processInfo : procInfos) {
                    if (processInfo.processName.equals(packageName)) {
                        return true;
                    }
                }
            }
            return false;
        }

2] check weather ur app is running or not inside alarm manager

if (Utils.isAppRunning(YourActivity.this, "com.your package name")) {
    // App is running
} else {
    // App is not running
    // intent to lounch ur app. 
}
Radhey
  • 2,139
  • 2
  • 24
  • 42
  • Thank you Radhey. I recieve this Error: cannot implicity convert type 'android.app.activitymanager.runningappprocessinfo' to 'system.collections.generic.list – arz Apr 20 '17 at 15:53