2015-07-01 31 views
11

Ben bildirimde göstermek için aşağıdaki yöntemi kullanıyorum android itme bildirim üzerinde çalışıyorum, ama sorun şu anda ActivityManager.getRunningTasks (1); kullanımdan kaldırılıyor. Bir stackoverflow sorusundan şunu okudum: "'u List<AppTask> döndürerek 'u getTaskInfo ile alabilirsiniz" ancak bunu nasıl kullanacağımı anlayamıyorum. Lütfen bana bu konuda yardım edin.ActivityManager.getRunningTasks kullanımdan kaldırıldı android

private void postNotification(Context ctx, Intent intent) { 
     try { 
      if (intent == null) { 
       Log.d(TAG, "Receiver intent null"); 
      } else { 
       String action = intent.getAction(); 
       if (action.equals("com.ziza.cy.UPDATE_STATUS")) { 

        JSONObject json = new JSONObject(intent.getExtras() 
          .getString("com.parse.Data")); 

        String type = json.getString("type"); 

        if (type.equals("AlertNotification")) { 

         String msg = json.getString("header"); 
         String title = "ncy"; 

         ActivityManager am = (ActivityManager) ctx 
           .getSystemService(Context.ACTIVITY_SERVICE); 
         List<RunningTaskInfo> taskInfo = am.getRunningTasks(1); 
         ComponentName componentInfo = taskInfo.get(0).topActivity; 

         // don't show notification if app is in foreground 
         if (componentInfo.getPackageName().equalsIgnoreCase(
           ctx.getPackageName())) { 

          // send broadcast receiver 
          Intent intentBroad = new Intent(); 
          intentBroad.setAction(Constants.sNOTIFICATION); 
          intentBroad.putExtra("msg", msg); 
          intentBroad.putExtra("title", title 
            + " " 
            + taskInfo.get(0).topActivity.getClass() 
              .getSimpleName()); 
          ctx.sendBroadcast(intentBroad); 
         } else { 
          // Activity Not Running 
          // Generate Notification 

          Intent intnt = new Intent(ctx, LogInActivity.class); 
          PendingIntent contentIntent = PendingIntent 
            .getActivity(ctx, 0, intnt, 0); 
          intnt.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP 
            | Intent.FLAG_ACTIVITY_NEW_TASK); 

          NotificationCompat.Builder builder = new NotificationCompat.Builder(
            ctx) 
            .setContentTitle(title) 
            .setContentText(msg) 
            .setTicker(msg) 
            .setSound(
              RingtoneManager 
                .getDefaultUri(RingtoneManager.TYPE_NOTIFICATION)) 
            .setStyle(
              new NotificationCompat.BigTextStyle() 
                .bigText(msg)) 
            .setAutoCancel(true) 
            .setSmallIcon(R.drawable.iconed) 
            .setOnlyAlertOnce(true) 
            .setDefaults(Notification.DEFAULT_VIBRATE); 

          Uri alarmSound = RingtoneManager 
            .getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); 
          builder.setSound(alarmSound); 
          builder.setContentIntent(contentIntent); 
          NotificationManager notificationManager = (NotificationManager) ctx 
            .getSystemService(Context.NOTIFICATION_SERVICE); 

          notificationManager.notify(0, builder.build()); 

         } 
        } 
       } 
      } 

     } catch (JSONException e) { 
      Log.d(TAG, "JSONException: " + e.getMessage()); 
     } 
    } 

cevap

9

Bu başlamanıza yardımcı olmalıdır

ActivityManager activityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); 
List<ActivityManager.AppTask> tasks = activityManager.getAppTasks(); 

for (ActivityManager.AppTask task : tasks) { 
    Log.d(TAG, "stackId: " + task.getTaskInfo().stackId); 
} 
+2

. Lütfen bana aşağıdaki koşullara göre açıklayabilir misiniz, aşağıdaki koşulu gibi gömmek istiyorum: ActivityManager am = (ActivityManager) ctx.getSystemService (Context.ACTIVITY_SERVICE); \t \t \t \t \t \t \t \t \t \t \t \t listesi TaskInfo = am.getRunningTasks (1); \t \t \t \t \t ComponentName componentInfo = taskInfo.get (0) .topActivity; –

2

Bunu ister miyim:

Bu Lollipop cihazlarda hem de ön Lollipop cihazlar için çalışması gerekir
/*** 
* Checking Whether any Activity of Application is running or not 
* @param context 
* @return 
*/ 
public static boolean isForeground(Context context) { 

    // Get the Activity Manager 
    ActivityManager manager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); 

    // Get a list of running tasks, we are only interested in the last one, 
    // the top most so we give a 1 as parameter so we only get the topmost. 
    List<ActivityManager.RunningAppProcessInfo> task = manager.getRunningAppProcesses(); 

    // Get the info we need for comparison. 
    ComponentName componentInfo = task.get(0).importanceReasonComponent; 

    // Check if it matches our package name. 
    if(componentInfo.getPackageName().equals(context.getPackageName())) 
     return true; 

    // If not then our app is not on the foreground. 
    return false; 
} 
+0

getRunningAppProcesses(); tüm arka plan uygulamalarını göstermez sadece kendini çalışan bir uygulamayı döndürür. Ben android lolipop ve –

28

public static boolean isBackgroundRunning(Context context) { 
     ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); 
     List<ActivityManager.RunningAppProcessInfo> runningProcesses = am.getRunningAppProcesses(); 
     for (ActivityManager.RunningAppProcessInfo processInfo : runningProcesses) { 
      if (processInfo.importance == ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND) { 
       for (String activeProcess : processInfo.pkgList) { 
        if (activeProcess.equals(context.getPackageName())) { 
         //If your app is the process in foreground, then it's not in running in background 
         return false; 
        } 
       } 
      } 
     } 


     return true; 
    } 

Düzenleme: Uygulamanın arka planda olması durumunda, buradaki cevabınız için tam tersi değil

+0

üzerinde kullanıyorum Manifest eklemek için herhangi bir izin var mı? "android.permission.GET_TASKS" veya "android.permission.REAL_GET_TASKS" –

+1

gibi. Teşekkürler, herhangi bir izin eklemeden çalışıyor –