Basically, it was explained here how Facebook made their Chathead app float above other apps and that you have to run it as a service. I followed an example that makes an image icon float above everything else. Here is the code from the example. It is not an exact answer to what you want, but it should help, and you can tweak the code to what you need to have done. You started off in the right direction and i hope this will help narrow that absolute direction you need.
MainActivity.java
package com.example.floatingicon;
import com.example.floatingicon.R;
import com.example.floatingicon.MainService;
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
public class MainActivity extends Activity
{
@Override
protected void onCreate(Bundle icicle){
super.onCreate(icicle);
setContentView(R.layout.main);
Bundle bund = getIntent().getExtras();
if(bund != null && bun.getString("LAUNCH").equals("YES")){
startService(new Intent(MainActivity.this, MainService.class));
}
Button start = (Button)findViewById(R.id.btnStart);
start.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v){
startService(new Intent(MainActivity.this, MainService.class));
}
});
Button stop = (Button)findViewById(R.id.btnStop);
stop.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v){
stopService(new Intent(MainActivity.this, MainService.class));
}
});
}
@Override
protected void onResume(){
Bundle bund = getIntent().getExtras();
if(bund != null && bund.getString("LAUNCH").equals("YES")){
startService(new Intent(MainActivity.this, MainService.class));
}
super.onResume();
}
}
MainService.java
package com.example.floatingicon;
import com.example.floatingicon.R;
import android.app.Service;
import android.content.Intent;
import android.graphics.PixelFormat;
import android.os.IBinder;
import android.view.Gravity;
import android.view.MotionEvent;
import android.view.View;
import android.view.WindowManager;
import android.widget.ImageView;
public class MainService extends Service {
private WindowManager windowManager;
private ImageView floatIcon;
@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
return null;
}
@Override
public void onCreate() {
super.onCreate();
windowManager = (WindowManager) getSystemService(WINDOW_SERVICE);
floatIcon = new ImageView(this);
floatIcon.setImageResource(R.drawable.floating);
final WindowManager.LayoutParams params = new WindowManager.LayoutParams(
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.TYPE_PHONE,
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
PixelFormat.TRANSLUCENT);
params.gravity = Gravity.TOP | Gravity.LEFT;
params.x = 0;
params.y = 100;
windowManager.addView(floatIcon, params);
try {
floatIcon.setOnTouchListener(new View.OnTouchListener() {
private WindowManager.LayoutParams paramsF = params;
private int initialX;
private int initialY;
private float initialTouchX;
private float initialTouchY;
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
// Get current time in nano seconds.
initialX = paramsF.x;
initialY = paramsF.y;
initialTouchX = event.getRawX();
initialTouchY = event.getRawY();
break;
case MotionEvent.ACTION_UP:
break;
case MotionEvent.ACTION_MOVE:
paramsF.x = initialX + (int) (event.getRawX() - initialTouchX);
paramsF.y = initialY + (int) (event.getRawY() - initialTouchY);
windowManager.updateViewLayout(floatIcon, paramsF);
break;
}
return false;
}
});
} catch (Exception e) {
// TODO: handle exception
}
}
@Override
public void onDestroy() {
super.onDestroy();
if (floatIcon != null) windowManager.removeView(floatIcon);
}
}
main.xml
<?xml version="1.0" encoding="utf-8" ?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="center"
android:orientation="vertical"
tools:context=".MainActivity" >
<Button
android:id="@+id/btnStart"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:layout_marginTop="100dp"
android:text="@string/start" />
<Button
android:id="@+id/btnStop"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@id/btnStart"
android:layout_alignRight="@id/btnStart"
android:layout_below="@id/btnStart"
android:layout_marginTop="10dp"
android:text="@string/stop" />
</RelativeLayout>
This should help you get started, unless you have already finished after all of this time.