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);
}
}
}
}