Android Open Source - screenstandby App Detector






From Project

Back to project page screenstandby.

License

The source code is released under:

GNU General Public License

If you think the Android project screenstandby listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

/*******************************************************************************
 * Copyright (c) 2014 Hoang Nguyen./*w ww .ja  v a  2s  .c  o  m*/
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the GNU Public License v2.0
 * which accompanies this distribution, and is available at
 * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
 * 
 * Contributors:
 *     Hoang Nguyen - initial API and implementation
 ******************************************************************************/
package com.nkahoang.screenstandby;

import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;

import android.app.ActivityManager;
import android.app.Service;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.SharedPreferences;
import android.os.IBinder;
import android.preference.PreferenceManager;

public class AppDetector extends Service {
    Process logcatProc;
    String logcatLine;
    Thread monitorThread;
    ActivityManager am;
    static Boolean isRunning = false;
    public AppDetector() {
    }
    
    private final static String LAUNCH_PARAM = "logcat -v raw ActivityManager:I *:S";
    final static String DETECT_SERVICE_CHANGE = "com.nkahoang.screenstandby.action.APPDETECTIONCHANGED";
    private SharedPreferences prefs;
    private Boolean isEnabled = false;
    private DataOutputStream os;
    private BufferedReader bufferedReader;
    private String package1, package2, package3, package4;
    
    public void onCreate() {
      isRunning = true;
        super.onCreate();
        
      prefs = PreferenceManager.getDefaultSharedPreferences(this);
      am = (ActivityManager) this.getSystemService( ACTIVITY_SERVICE );
      monitorThread = new Thread(rMonitor);
      
      IntentFilter filter = new IntentFilter(DETECT_SERVICE_CHANGE);
      registerReceiver(receiver, filter);
      
      isEnabled = prefs.getBoolean("appdetection", false);
        Initialize();
    }
    
    private BroadcastReceiver receiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
          if (intent.hasExtra("enabled"))
          {
            isEnabled = intent.getBooleanExtra("enabled", false);
          }
          Initialize();
          Logger.Log(context, intent);
        }
    };
    
    public void Initialize()
    {
      package1 = prefs.getString("appdetect1package","");
      package2 = prefs.getString("appdetect2package","");
      package3 = prefs.getString("appdetect3package","");
      package4 = prefs.getString("appdetect4package","");
      
      if (isEnabled) {
        if (!monitorThread.isAlive())
          monitorThread.start();
      }
      else
      {
        try
        {
          if (monitorThread.isAlive()) {
            monitorThread.stop();
             os.close();
             bufferedReader.close();
             logcatProc.destroy();
           }
        }
        catch(Exception ex){}
        try
        {
          unregisterReceiver(receiver);
        }
        catch(Exception ex){}
         isRunning = false;
        this.stopSelf();
      }
    }
    
    private Boolean checkForegroundActivity()
    {
      return
        ((package1.length() > 0) &&
          am.getRunningTasks(1).get(0).baseActivity.getPackageName().contains(package1)) ||
      ((package2.length() > 0) &&
          am.getRunningTasks(1).get(0).baseActivity.getPackageName().contains(package2)) ||
      ((package3.length() > 0) &&
          am.getRunningTasks(1).get(0).baseActivity.getPackageName().contains(package3)) ||
      ((package4.length() > 0) &&
          am.getRunningTasks(1).get(0).baseActivity.getPackageName().contains(package4));
    }
    
    private void startProcess()
    {
       try {
         logcatProc = Runtime.getRuntime().exec("su");
         os = new DataOutputStream(logcatProc.getOutputStream());
         os.writeBytes(LAUNCH_PARAM + "\n");
         bufferedReader = new BufferedReader(new InputStreamReader(logcatProc.getInputStream()));
         while (((logcatLine = bufferedReader.readLine()) != null) && isEnabled) {
           if (isRunningPackageStr(logcatLine))
           {
             if (checkForegroundActivity())
             {
               Intent serviceIntent = new Intent();
                    serviceIntent.setAction(StandbyService.ENABLE_INTENT);
                    AppDetector.this.sendBroadcast(serviceIntent);
             }
             else
             {
               Intent serviceIntent = new Intent();
                    serviceIntent.setAction(StandbyService.TOGGLE_INTENT);
                   AppDetector.this.sendBroadcast(serviceIntent);
             }
           }
         }
         os.close();
         bufferedReader.close();
         logcatProc.destroy();
     } catch (IOException e) {}
    }

    public static boolean isRunningPackageStr(String paramString)
    {
      return paramString.startsWith("Starting acti") ||
           (paramString.startsWith("Start") && paramString.contains("for activity")) ||
           paramString.startsWith("START");
    }
    
    Runnable rMonitor = new Runnable() {
    @Override
    public void run() {
      startProcess();
    }
  };
    
    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }
}




Java Source Code List

android.os.UEventObserver.java
com.nkahoang.kernelswitchobserver.DockObserver.java
com.nkahoang.kernelswitchobserver.GenericHardwareObserver.java
com.nkahoang.kernelswitchobserver.HDMIObserver.java
com.nkahoang.kernelswitchobserver.HardwareNotFoundException.java
com.nkahoang.kernelswitchobserver.HeadsetObserver.java
com.nkahoang.kernelswitchobserver.UEventStateChangeHandler.java
com.nkahoang.screenstandby.AppDetector.java
com.nkahoang.screenstandby.AutoSettingWizard.java
com.nkahoang.screenstandby.BTReceiver.java
com.nkahoang.screenstandby.BackupHelper.java
com.nkahoang.screenstandby.BaseActivity.java
com.nkahoang.screenstandby.BootTimeReceiver.java
com.nkahoang.screenstandby.ChangeLogHandler.java
com.nkahoang.screenstandby.DisableActivity.java
com.nkahoang.screenstandby.DockReceiver.java
com.nkahoang.screenstandby.EnableActivity.java
com.nkahoang.screenstandby.ExceptionHandler.java
com.nkahoang.screenstandby.FlowLayout.java
com.nkahoang.screenstandby.FontManager.java
com.nkahoang.screenstandby.HDMIReceiver.java
com.nkahoang.screenstandby.HUDNative.java
com.nkahoang.screenstandby.HeadsetReceiver.java
com.nkahoang.screenstandby.IconContextMenu.java
com.nkahoang.screenstandby.Logger.java
com.nkahoang.screenstandby.Main.java
com.nkahoang.screenstandby.ManualBrightnessChangerActivity.java
com.nkahoang.screenstandby.MediaButtonControlReceiver.java
com.nkahoang.screenstandby.NotificationBar.java
com.nkahoang.screenstandby.NumberPickerButton.java
com.nkahoang.screenstandby.NumberPicker.java
com.nkahoang.screenstandby.OneTwoDimmer.java
com.nkahoang.screenstandby.OutcomingCallReceiver.java
com.nkahoang.screenstandby.PreferenceListFragment.java
com.nkahoang.screenstandby.RemoteControlSelectActivity.java
com.nkahoang.screenstandby.RemoteControllerActivity.java
com.nkahoang.screenstandby.RemoteServerActivity.java
com.nkahoang.screenstandby.ServiceToggleReceiver.java
com.nkahoang.screenstandby.SettingActivity.java
com.nkahoang.screenstandby.ShortcutActivity.java
com.nkahoang.screenstandby.ShortcutOnActivity.java
com.nkahoang.screenstandby.StandbyService.java
com.nkahoang.screenstandby.StandbyToggleReceiver.java
com.nkahoang.screenstandby.StandbyWidgetProvider2by2.java
com.nkahoang.screenstandby.StandbyWidgetProvider.java
com.nkahoang.screenstandby.TimePickerDialog.java
com.nkahoang.screenstandby.TimePicker.java
com.nkahoang.screenstandby.TroubleshootingActivity.java
com.nkahoang.screenstandby.VolumeKeyDetector.java
com.nkahoang.screenstandby.XTopDPIChanger.java
com.nkahoang.screenstandby.remotecontrol.ClientService.java
com.nkahoang.screenstandby.remotecontrol.Core.java
com.nkahoang.screenstandby.remotecontrol.OnClientStateChangedHandler.java
com.nkahoang.screenstandby.remotecontrol.OnServiceAddressResolvedHandler.java
com.nkahoang.screenstandby.remotecontrol.OnStateChangedHandler.java
com.nkahoang.screenstandby.remotecontrol.RemoteAppPackages.java
com.nkahoang.screenstandby.remotecontrol.RemotePackageInfo.java
com.nkahoang.screenstandby.remotecontrol.ServerService.java
com.nkahoang.screenstandby.remotecontrol.ServiceBinder.java
com.nkahoang.screenstandby.settings.DeviceSettings.java
com.nkahoang.screenstandby.settings.RootChecker.java
com.nkahoang.screenstandby.settings.UpdateChecker.java