2017-04-20 55 views
0

根据此链接(Starting AlarmManager in Android (C#)),我可以看到“Time Up ... Now Vibrating !!!”。 当我的应用程序关闭时,我可以看到“Time Up ... Now vibrate !!!”。到目前为止,一切都很好。在AlramManager中如何检查一个应用程序是打开还是关闭

我的问题:

白衣AlramManager,如何检查应用程序是打开还是关闭?

2.如果该应用程序已关闭,我该如何打开它?

编辑:

我编辑我的应用程序,但是当我的应用程序是不是在调试模式 - 即闭环我再次看到“应用程序正在运行”。为什么?我想在关闭时打开我的应用程序。

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

编辑:

我看到这个链接(How to check if activity is in foreground or in visible background?

我编辑我的代码,我现在有正确的输出。

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

回答

0

1]作出的Util类

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]一个方法来检查乌尔天气应用程序正在运行或里面没有报警经理

if (Utils.isAppRunning(YourActivity.this, "com.your package name")) { 
    // App is running 
} else { 
    // App is not running 
    // intent to lounch ur app. 
} 
+0

谢谢Radhey。我收到此错误:不能默示将类型'android.app.activitymanager.runningappprocessinfo'转换为'system.collections.generic.list arz

+0

我编辑了我的程序。 – arz

相关问题