Simulator Screenshots

Check Current Running Activity | Task | Application - Android Example

DOWNLOAD SOURCE CODE
 

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

Share this: