『壹』 android如何獲取最頂層窗口 csdn
{
publicStringpackageName="";
publicStringtopActivityName="";
}
(){
ActivityManagermanager=((ActivityManager)GlobalConfig.getContext().getSystemService(Context.ACTIVITY_SERVICE));
TopActivityInfoinfo=newTopActivityInfo();
if(Build.VERSION.SDK_INT>=21){
List<ActivityManager.RunningAppProcessInfo>pis=manager.getRunningAppProcesses();
ActivityManager.=pis.get(0);
if(topAppProcess!=null&&topAppProcess.importance==ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND){
info.packageName=topAppProcess.processName;
info.topActivityName="";
}
}else{
//getRunningTasks()isdeprecatedsinceAPILevel21(Android5.0)
ListlocalList=manager.getRunningTasks(1);
ActivityManager.=(ActivityManager.RunningTaskInfo)localList.get(0);
info.packageName=localRunningTaskInfo.topActivity.getPackageName();
info.topActivityName=localRunningTaskInfo.topActivity.getClassName();
}
returninfo;
}
『貳』 如何獲得當前的activity android
android開發中獲取當前的Activity有多種情況;
在Activity中,this就是當前的Activity,例如this.startActivity。
在Fragment中可以通過 getActivity()來得到當前裝載這個Fragment的Activity。
通過Activity堆棧來獲取當前顯示的這個Activity
ActivityManager am = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
ComponentName cn = am.getRunningTasks(1).get(0).topActivity;
『叄』 android 如何獲取一個界面最頂層的view並處理單擊事件的分發機制
android事件分發機制 就是一個觸摸事件發生了,從一個窗口傳遞到一個視圖,再傳遞到另外一個視圖,最後被消費的過程,在android中還是比較復雜的傳遞流程如下:
(1) 事件從Activity.dispatchTouchEvent()開始傳遞,只要沒有被停止或攔截,從最上層的View(ViewGroup)開始一直往下(子View)傳遞。子View可以通過onTouchEvent()對事件進行處理。
(2) 事件由父View(ViewGroup)傳遞給子View,ViewGroup可以通過onInterceptTouchEvent()對事件做攔截,停止其往下傳遞。
『肆』 如何獲取TASK中的Activity
ActivityManager manager=(ActivityManager)context.getSystemService(Context.ACTIVITY_SERVICE);
List<RunningTaskInfo> info=manager.getRunningTasks(1);
String classname = null;
if( null != info && !(info.isEmpty())){
classname=info.get(0).topActivity.getClassName();
if (classname.equals("com.android.settings.CryptKeeper")) {
return;
}else {
.......
}
}else{
...............
}
說明:String shortClassName = info.get(0).topActivity.getShortClassName(); //類名
String className = info.get(0).topActivity.getClassName(); //完整類名
String packageName = info.get(0).topActivity.getPackageName(); //包名
getRunninTask(int max)獲得當前的max個task的list<ActivityManager.runningTask>,實際個數可能少於max個,取決於當前運行的task個數是否大於max個。
get(0)取得當前使用的runningTask,get(1)是上一次使用的runningTask
ActivityManager.runningTask的topActivity可以獲得取得runingTask的頂層activity
在androidmanifest.xml中,添加用戶許可權 <uses-permissionAndroid:name="android.permission.GET_TASKS">
『伍』 android 獲取所有正在運行的activity
首先是新建一個Android工程,然後修改【main.xml】文件如下:
添加一個ListView
[html] view plain
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<ListView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/tasklist"
/>
</LinearLayout>
然後編輯【java代碼】
[java] view plain
package com.cayden.run;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import android.app.Activity;
import android.app.ActivityManager;
import android.app.ActivityManager.RunningTaskInfo;
import android.content.Context;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListAdapter;
import android.widget.ListView;
public class MyActivityRunDemo extends Activity {
private ListView tasklist=null;
private ListAdapter adapter=null;
private List<String> all=new ArrayList<String>();
private ActivityManager activityManager=null;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
tasklist=(ListView)this.findViewById(R.id.tasklist);
activityManager=(ActivityManager)super.getSystemService(Context.ACTIVITY_SERVICE);
listActivity();
}
public void listActivity(){
List<RunningTaskInfo> tasks= activityManager.getRunningTasks(30);
Iterator<RunningTaskInfo> itInfo=tasks.iterator();
while(itInfo.hasNext()){
RunningTaskInfo info=itInfo.next();
all.add("【id="+info.id+"】,"+info.baseActivity.getClassName());
}
adapter=new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1,this.all);
tasklist.setAdapter(adapter);
}
}
最後需要再配置所需要的許可權【AndroidManifest.xml】
[html] view plain
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.cayden.run"
android:versionCode="1"
android:versionName="1.0">
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".MyActivityRunDemo"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
<uses-sdk android:minSdkVersion="8" />
<uses-permission android:name="android.permission.GET_TASKS"></uses-permission>
</manifest>
程序運行效果如圖所示:
『陸』 如何獲取android app的Activity
工具/原料:
app
android手機
數據線
1.需要配置好android的開發環境後,打開cmd命令窗口
『柒』 android要將一個activity置於屏幕頂層,怎麼弄
這種關鍵的可以考慮下設置 android:noHistory = "true" 如果有別的activity蓋在上面就消失了
祝你愉快,滿意請採納哦
『捌』 Android 如何獲取最頂端的Top Activity
Android 如何獲取最頂端的Top Activity, 見如下代碼:
[java] view plain
public static class TopActivityInfo {
public String packageName = "";
public String topActivityName = "";
}
[java] view plain
private TopActivityInfo getTopActivityInfo() {
ActivityManager manager = ((ActivityManager)GlobalConfig.getContext().getSystemService(Context.ACTIVITY_SERVICE));
TopActivityInfo info = new TopActivityInfo();
if (Build.VERSION.SDK_INT >= 21) {
List<ActivityManager.RunningAppProcessInfo> pis = manager.getRunningAppProcesses();
ActivityManager.RunningAppProcessInfo topAppProcess = pis.get(0);
if (topAppProcess != null && topAppProcess.importance == ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND) {
info.packageName = topAppProcess.processName;
info.topActivityName = "";
}
} else {
//getRunningTasks() is deprecated since API Level 21 (Android 5.0)
List localList = manager.getRunningTasks(1);
ActivityManager.RunningTaskInfo localRunningTaskInfo = (ActivityManager.RunningTaskInfo)localList.get(0);
info.packageName = localRunningTaskInfo.topActivity.getPackageName();
info.topActivityName = localRunningTaskInfo.topActivity.getClassName();
}
return info;
}
『玖』 android開發問題:如何在當前Acitivity中用代碼獲取上一個Activity名稱
需要在跳轉的Intent對象中添加一個參數:
intent.putExtra("comeFrom",activityName);
跳轉到目標activity時帶上當前activity的名字,這樣才知道是從哪裡跳轉進來的。
『拾』 android 如何獲取當前界面最上面的activity
在Android系統中,Activity窗口的大小是由WindowManagerService服務來計算的。WindowManagerService服務會根據屏幕及其裝飾區的大小來決定Activity窗口的大小。一個Activity窗口只有知道自己的大小之後,才能對它裡面的UI元素進行測量、布局以及繪制。本文將詳細分析WindowManagerService服務計算Activity窗口大小的過程。
一般來說,Activity窗口的大小等於整個屏幕的大小,但是它並不佔據著整塊屏幕。為了理解這一點,我們首先分析一下Activity窗口的區域是如何劃分的。
我們知道,Activity窗口的上方一般會有一個狀態欄,用來顯示3G信號、電量使用等圖標,如圖1所示。
圖1 Activity窗口的Content區域示意圖
從Activity窗口剔除掉狀態欄所佔用的區域之後,所得到的區域就稱為內容區域(Content Region)。顧名思義,內容區域就是用來顯示Activity窗口的內容的。我們再抽象一下,假設Activity窗口的四周都有一塊類似狀態欄的區域,那麼將這些區域剔除之後,得到中間的那一塊區域就稱為內容區域,而被剔除出來的區域所組成的區域就稱為內容邊襯區域(Content Insets)。Activity窗口的內容邊襯區域可以用一個四元組(content-left, content-top, content-right, content-bottom)來描述,其中,content-left、content-right、content-top、content-bottom分別用來描述內容區域與窗口區域的左右上下邊界距離。
我們還知道,Activity窗口有時候需要顯示輸入法窗口,如圖2所示。
圖2 Activity窗口的Visible區域示意圖
這時候Activity窗口的內容區域的大小有可能沒有發生變化,這取決於它的Soft Input Mode。我們假設Activity窗口的內容區域沒有發生變化,但是它在底部的一些區域被輸入法窗口遮擋了,即它在底部的一些內容是不可見的。從Activity窗口剔除掉狀態欄和輸入法窗口所佔用的區域之後,所得到的區域就稱為可見區域(Visible Region)。同樣,我們再抽象一下,假設Activity窗口的四周都有一塊類似狀態欄和輸入法窗口的區域,那麼將這些區域剔除之後,得到中間的那一塊區域就稱為可見區域,而被剔除出來的區域所組成的區域就稱為可見邊襯區域(Visible Insets)。Activity窗口的可見邊襯區域可以用一個四元組(visible-left, visible-top, visible-right, visible-bottom)來描述,其中,visible-left、visible-right、visible-top、visible-bottom分別用來描述可見區域與窗口區域的左右上下邊界距離。
在大多數情況下,Activity窗口的內容區域和可見區域的大小是一致的,而狀態欄和輸入法窗口所佔用的區域又稱為屏幕裝飾區。理解了這些概念之後,我們就可以推斷,WindowManagerService服務實際上就是需要根據屏幕以及可能出現的狀態欄和輸入法窗口的大小來計算出Activity窗口的整體大小及其內容區域邊襯和可見區域邊襯的大小。有了這三個數據之後,Activity窗口就可以對它裡面的UI元素進行測量、布局以及繪制等操作了。
從前面Android應用程序窗口(Activity)的繪圖表面(Surface)的創建過程分析一文可以知道,應用程序進程是從ViewRoot類的成員函數performTraversals開始,向WindowManagerService服務請求計算一個Activity窗口的大小的,因此,接下來我們就從ViewRoot類的成員函數performTraversals開始分析一個Activity窗口大小的計算過程,如圖3所示。
圖3 Activity窗口大小的計算過程
這個過程可以分為11個步驟,接下來我們就詳細分析每一個步驟。
Step 1. ViewRoot.performTraversals
這個函數定義在文件frameworks/base/core/java/android/view/ViewRoot.java中,它的實現很復雜,一共有600-行,不過大部分代碼都是用來計算Activity窗口的大小的,我們分段來閱讀:
[java] view plainpublic final class ViewRoot extends Handler implements
ViewParent,
View.AttachInfo.Callbacks {
......
private void performTraversals() {
......
final View host = mView;
......
int desiredWindowWidth;
int desiredWindowHeight;
int childWidthMeasureSpec;
int childHeightMeasureSpec;
......
Rect frame = mWinFrame;
if (mFirst) {
......
DisplayMetrics packageMetrics =
mView.getContext().getResources().getDisplayMetrics();
desiredWindowWidth = packageMetrics.widthPixels;
desiredWindowHeight = packageMetrics.heightPixels;
} else {
desiredWindowWidth = frame.width();
desiredWindowHeight = frame.height();
if (desiredWindowWidth != mWidth || desiredWindowHeight != mHeight) {
......
windowResizesToFitContent = true;
}
}
復制代碼
這段代碼用來獲得Activity窗口的當前寬度desiredWindowWidth和當前高度desiredWindowHeight。