请问安卓如何实时获取系统栈顶应用的包名 安卓栈应用 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 import java.util.List;import android.app.Activity;import android.app.ActivityManager;import android.app.ActivityManager.RunningTaskInfo;import android.content.ComponentName;import android.graphics.Color;import android.graphics.PixelFormat;import android.os.Bundle;import android.os.Handler;import android.view.Gravity;import android.view.View;import android.view.View.OnClickListener;import android.view.WindowManager;import android.view.WindowManager.LayoutParams;import android.widget.Button;public class MainActivity extends Activity { private WindowManager wm = null; Runnable runnable; private WindowManager.LayoutParams wmParams = null; private MyFloatView myFV = null; public Handler handler; String temp; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); getTopActivity(this); // 获取启动按钮 Button start = (Button) findViewById(R.id.button1); // 获取移除按钮 Button remove = (Button) findViewById(R.id.button2); // 绑定监听 start.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub createView();// Intent intent = new Intent(MainActivity.this, FxService.class); // //启动FxService// startService(intent); } }); remove.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { wm.removeView(myFV);// Intent intent = new Intent(MainActivity.this, FxService.class); // //终止FxService // stopService(intent); } }); } void getTopActivity(Activity context) { handler = new Handler(); runnable = new Runnable() { @Override public void run() { // TODO Auto-generated method stub ActivityManager manager = (ActivityManager) getSystemService(ACTIVITY_SERVICE); List<RunningTaskInfo> runningTaskInfos = manager .getRunningTasks(1); if (runningTaskInfos != null) { ComponentName cn = runningTaskInfos.get(0).topActivity; temp = "你当前打开程序的信息为:\n包名:" + cn.getPackageName() + "\n类名:" + cn.getClassName(); } handler.postDelayed(this, 50); } }; handler.postDelayed(runnable, 50); } private void createView() { myFV = new MyFloatView(getApplicationContext()); myFV.setText(temp); myFV.setTextColor(Color.BLACK); // 获取WindowManager wm = (WindowManager) getApplicationContext().getSystemService("window"); // 设置LayoutParams(全局变量)相关参数 wmParams = ((MyApplication) getApplication()).getMywmParams(); /** * 以下都是WindowManager.LayoutParams的相关属性 具体用途可参考SDK文档 */ wmParams.type = LayoutParams.TYPE_PHONE; // 设置window type wmParams.format = PixelFormat.RGBA_8888; // 设置图片格式,效果为背景透明 // 设置Window flag wmParams.flags = LayoutParams.FLAG_NOT_TOUCH_MODAL | LayoutParams.FLAG_NOT_FOCUSABLE; /* * 下面的flags属性的效果形同“锁定”。 悬浮窗不可触摸,不接受任何事件,同时不影响后面的事件响应。 * wmParams.flags=LayoutParams.FLAG_NOT_TOUCH_MODAL | * LayoutParams.FLAG_NOT_FOCUSABLE | LayoutParams.FLAG_NOT_TOUCHABLE; */ wmParams.gravity = Gravity.LEFT | Gravity.TOP; // 调整悬浮窗口至左上角 // 以屏幕左上角为原点,设置x、y初始值 wmParams.x = 0; wmParams.y = 0; // 设置悬浮窗口长宽数据 wmParams.width = 500; wmParams.height = 250; // 显示myFloatView图像 wm.addView(myFV, wmParams); } @Override protected void onPause() { // TODO Auto-generated method stub getTopActivity(MainActivity.this); super.onPause(); } @Override protected void onDestroy() { // TODO Auto-generated method stub handler.removeCallbacks(runnable); super.onDestroy(); }} import android.content.Context;import android.util.Log;import android.view.WindowManager;import android.widget.TextView;import android.view.MotionEvent;public class MyFloatView extends TextView { private float mTouchStartX; private float mTouchStartY; private float x; private float y; private WindowManager wm = (WindowManager) getContext() .getApplicationContext().getSystemService("window"); // 此wmParams为获取的全局变量,用以保存悬浮窗口的属性 private WindowManager.LayoutParams wmParams = ((MyApplication) getContext() .getApplicationContext()).getMywmParams(); public MyFloatView(Context context) { super(context); // TODO Auto-generated constructor stub } @Override public boolean onTouchEvent(MotionEvent event) { //获取相对屏幕的坐标,即以屏幕左上角为原点 x = event.getRawX(); y = event.getRawY()-25; //25是系统状态栏的高度 Log.i("currP", "currX"+x+"====currY"+y); switch (event.getAction()) { case MotionEvent.ACTION_DOWN: //获取相对View的坐标,即以此View左上角为原点 mTouchStartX = event.getX(); mTouchStartY = event.getY(); Log.i("startP", "startX"+mTouchStartX+"====startY"+mTouchStartY); break; case MotionEvent.ACTION_MOVE: updateViewPosition(); break; case MotionEvent.ACTION_UP: updateViewPosition(); mTouchStartX=mTouchStartY=0; break; } return true; } private void updateViewPosition(){ //更新浮动窗口位置参数 wmParams.x=(int)( x-mTouchStartX); wmParams.y=(int) (y-mTouchStartY); wm.updateViewLayout(this, wmParams); } } 第三方包更新问题 求教 自动重拨功能例子学习。 android如何使用jsp页面链接Mysql数据库 android的读取文件问题 android中像素级碰撞检测怎么做? 请教界面布局问题? 谁知道android中相机的全景功能是怎么实现的 ? 关于底部菜单跳转的问题! 我在这里,大神你在哪里? 求android老手指导。。 从byte分离出来的高低四位怎么再拼成一个byte 安卓中Activity Lifecycle问题,求教大神 请问 判断是否联网和 是否有可用网络 这两个方法作用是不是一样的
import android.app.ActivityManager;
import android.app.ActivityManager.RunningTaskInfo;
import android.content.ComponentName;
import android.graphics.Color;
import android.graphics.PixelFormat;
import android.os.Bundle;
import android.os.Handler;
import android.view.Gravity;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.WindowManager;
import android.view.WindowManager.LayoutParams;
import android.widget.Button;public class MainActivity extends Activity { private WindowManager wm = null;
Runnable runnable;
private WindowManager.LayoutParams wmParams = null; private MyFloatView myFV = null;
public Handler handler;
String temp; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
getTopActivity(this); // 获取启动按钮
Button start = (Button) findViewById(R.id.button1);
// 获取移除按钮
Button remove = (Button) findViewById(R.id.button2);
// 绑定监听
start.setOnClickListener(new OnClickListener() { @Override
public void onClick(View v) {
// TODO Auto-generated method stub
createView();
// Intent intent = new Intent(MainActivity.this, FxService.class);
// //启动FxService
// startService(intent); }
}); remove.setOnClickListener(new OnClickListener() { @Override
public void onClick(View v) {
wm.removeView(myFV);
// Intent intent = new Intent(MainActivity.this, FxService.class);
// //终止FxService
// stopService(intent);
}
}); } void getTopActivity(Activity context) {
handler = new Handler();
runnable = new Runnable() { @Override
public void run() {
// TODO Auto-generated method stub
ActivityManager manager = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
List<RunningTaskInfo> runningTaskInfos = manager
.getRunningTasks(1);
if (runningTaskInfos != null) {
ComponentName cn = runningTaskInfos.get(0).topActivity;
temp = "你当前打开程序的信息为:\n包名:" + cn.getPackageName() + "\n类名:"
+ cn.getClassName();
}
handler.postDelayed(this, 50);
} };
handler.postDelayed(runnable, 50);
} private void createView() {
myFV = new MyFloatView(getApplicationContext());
myFV.setText(temp);
myFV.setTextColor(Color.BLACK);
// 获取WindowManager
wm = (WindowManager) getApplicationContext().getSystemService("window");
// 设置LayoutParams(全局变量)相关参数
wmParams = ((MyApplication) getApplication()).getMywmParams(); /**
* 以下都是WindowManager.LayoutParams的相关属性 具体用途可参考SDK文档
*/
wmParams.type = LayoutParams.TYPE_PHONE; // 设置window type
wmParams.format = PixelFormat.RGBA_8888; // 设置图片格式,效果为背景透明 // 设置Window flag
wmParams.flags = LayoutParams.FLAG_NOT_TOUCH_MODAL
| LayoutParams.FLAG_NOT_FOCUSABLE;
/*
* 下面的flags属性的效果形同“锁定”。 悬浮窗不可触摸,不接受任何事件,同时不影响后面的事件响应。
* wmParams.flags=LayoutParams.FLAG_NOT_TOUCH_MODAL |
* LayoutParams.FLAG_NOT_FOCUSABLE | LayoutParams.FLAG_NOT_TOUCHABLE;
*/ wmParams.gravity = Gravity.LEFT | Gravity.TOP; // 调整悬浮窗口至左上角
// 以屏幕左上角为原点,设置x、y初始值
wmParams.x = 0;
wmParams.y = 0; // 设置悬浮窗口长宽数据
wmParams.width = 500;
wmParams.height = 250; // 显示myFloatView图像
wm.addView(myFV, wmParams); }
@Override
protected void onPause() {
// TODO Auto-generated method stub
getTopActivity(MainActivity.this);
super.onPause();
}
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
handler.removeCallbacks(runnable);
super.onDestroy();
}
}
import android.util.Log;
import android.view.WindowManager;
import android.widget.TextView;
import android.view.MotionEvent;public class MyFloatView extends TextView {
private float mTouchStartX;
private float mTouchStartY;
private float x;
private float y; private WindowManager wm = (WindowManager) getContext()
.getApplicationContext().getSystemService("window");
// 此wmParams为获取的全局变量,用以保存悬浮窗口的属性
private WindowManager.LayoutParams wmParams = ((MyApplication) getContext()
.getApplicationContext()).getMywmParams(); public MyFloatView(Context context) {
super(context);
// TODO Auto-generated constructor stub
}
@Override
public boolean onTouchEvent(MotionEvent event) {
//获取相对屏幕的坐标,即以屏幕左上角为原点
x = event.getRawX();
y = event.getRawY()-25; //25是系统状态栏的高度
Log.i("currP", "currX"+x+"====currY"+y);
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
//获取相对View的坐标,即以此View左上角为原点
mTouchStartX = event.getX();
mTouchStartY = event.getY();
Log.i("startP", "startX"+mTouchStartX+"====startY"+mTouchStartY);
break;
case MotionEvent.ACTION_MOVE:
updateViewPosition();
break;
case MotionEvent.ACTION_UP:
updateViewPosition();
mTouchStartX=mTouchStartY=0;
break;
}
return true;
}
private void updateViewPosition(){
//更新浮动窗口位置参数
wmParams.x=(int)( x-mTouchStartX);
wmParams.y=(int) (y-mTouchStartY);
wm.updateViewLayout(this, wmParams);
} }