Check Current Running Activity | Task | Application - Android Example

In this example detecting current running activity from top of the activity stack. In this way we can find out current running application and task.

 

Use :

   1. Suppose you have a task like , when user opens message/phone call/any application screen then your app performs an action like start a music or vibration etc....

 

Project Structure :

 

detect current running activity

 

File : AndroidMainifest.xml

 

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.checkcurrentrunningapplication"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="10"/>

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.example.checkcurrentrunningapplication.Main"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        
        <receiver android:name=".StartupReceiver">
			<intent-filter>
				<action android:name="android.intent.action.BOOT_COMPLETED" />
				<action android:name="StartupReceiver_Manual_Start" />
			</intent-filter>
		</receiver>
		
        <receiver android:name = ".CheckRunningApplicationReceiver"/>
        
    </application>
    <uses-permission android:name="android.permission.GET_TASKS" />
</manifest>

 

File : src/Main.java

 

Inside This class Start Broadcast reciever to check current running activity/task/application.

 


package com.example.checkcurrentrunningapplication;

import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;

public class Main extends Activity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		 
		// Start broadcast receiver may be StartupReceiver not started on BOOT_COMPLETED
		// Check AndroidManifest.xml file
		initialize();
	}

	private void initialize() {
		
		// Start receiver with the name StartupReceiver_Manual_Start
		// Check AndroidManifest.xml file
		getBaseContext().getApplicationContext().sendBroadcast(
				new Intent("StartupReceiver_Manual_Start"));
	}
}

 

File : src/StartupReceiver.java

 

This receiver will on phone boot time (see AndroidMainifest.xml). Creating alarm that will call broadcast receiver CheckRunningApplicationReceiver.class after each 5 seconds.

 


package com.example.checkcurrentrunningapplication;

import android.app.AlarmManager;
import android.app.PendingIntent;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.SystemClock;
import android.util.Log;

public class StartupReceiver extends BroadcastReceiver {

	static final String TAG = "SR";
	
	final int startupID = 1111111;

	
	@Override
	public void onReceive(Context context, Intent intent) {
		
        // Create AlarmManager from System Services
        final AlarmManager alarmManager = (AlarmManager) context
					.getSystemService(Context.ALARM_SERVICE);
		try{
                // Create pending intent for CheckRunningApplicationReceiver.class 
                // it will call after each 5 seconds
                
				Intent i7 = new Intent(context, CheckRunningApplicationReceiver.class);
				PendingIntent ServiceManagementIntent = PendingIntent.getBroadcast(context,
						startupID, i7, 0);
				alarmManager.setRepeating(AlarmManager.ELAPSED_REALTIME,
						SystemClock.elapsedRealtime(), 
						5000, ServiceManagementIntent);
				
				
			} catch (Exception e) {
				Log.i(TAG, "Exception : "+e);
			}
			
		}
	
}


 

File : src/CheckRunningApplicationReceiver.java

 

This broadcast receiver will call after each 5 seconds and check CALL/SMS/THIS example screen is open or not. if CALL/SMS/THIS example screen open then show alert message on screen.

 


package com.example.checkcurrentrunningapplication;

import java.util.List;
import android.app.ActivityManager;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;
import android.widget.Toast;

public class CheckRunningApplicationReceiver extends BroadcastReceiver {

	public final String TAG = "CRAR"; // CheckRunningApplicationReceiver

	@Override
	public void onReceive(Context aContext, Intent anIntent) {
		
		try {
			
			// Using ACTIVITY_SERVICE with getSystemService(String) 
			// to retrieve a ActivityManager for interacting with the global system state.
			
			ActivityManager am = (ActivityManager) aContext
					.getSystemService(Context.ACTIVITY_SERVICE);
			
			// Return a list of the tasks that are currently running, 
			// with the most recent being first and older ones after in order.
			// Taken 1 inside getRunningTasks method means want to take only 
			// top activity from stack and forgot the olders.
			
			List<ActivityManager.RunningTaskInfo> alltasks = am
					.getRunningTasks(1);

			// 
			for (ActivityManager.RunningTaskInfo aTask : alltasks) {

				
                // Used to check for CALL screen  
				
				if (aTask.topActivity.getClassName().equals("com.android.phone.InCallScreen")
				    || aTask.topActivity.getClassName().equals("com.android.contacts.DialtactsActivity"))
				{
					// When user on call screen show a alert message
                    Toast.makeText(aContext, "Phone Call Screen.", Toast.LENGTH_LONG).show();	
				}
				
				// Used to check for SMS screen
				
				if (aTask.topActivity.getClassName().equals("com.android.mms.ui.ConversationList")
					    || aTask.topActivity.getClassName().equals("com.android.mms.ui.ComposeMessageActivity"))
				{
					// When user on Send SMS screen show a alert message
                    Toast.makeText(aContext, "Send SMS Screen.", Toast.LENGTH_LONG).show();	
				}
				
				
				// Used to check for CURRENT example main screen
				
				String packageName = "com.example.checkcurrentrunningapplication";
				
				if (aTask.topActivity.getClassName().equals(
						packageName + ".Main"))
				{
                   // When opens this example screen then show a alert message
                   Toast.makeText(aContext, "Check Current Running Application Example Screen.", 
                                   Toast.LENGTH_LONG).show();	
				}
				
				
				// These are showing current running activity in logcat with 
				// the use of different methods
				
				Log.i(TAG, "===============================");
				
					Log.i(TAG, "aTask.baseActivity: "
								+ aTask.baseActivity.flattenToShortString());
					
					Log.i(TAG, "aTask.baseActivity: "
								+ aTask.baseActivity.getClassName());
					
					Log.i(TAG, "aTask.topActivity: "
								+ aTask.topActivity.flattenToShortString());
					
					Log.i(TAG, "aTask.topActivity: "
								+ aTask.topActivity.getClassName());
				
				Log.i(TAG, "===============================");
				
				
			}

		} catch (Throwable t) {
			Log.i(TAG, "Throwable caught: "
						+ t.getMessage(), t);
		}
		
	}

}


 

File : main.xml

 

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".Main" >

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:text="Starting broadcast reciever to check current running tasks." />

</RelativeLayout>

 

Logcat Output Screenshot :

 

logcat_output_for_current_open_activity_6