① android Package name 是什麼,有什麼用
1、package name是指一個應用的包名,是Android系統中為每一個應用程序分配的一個標識,每個應用的標識都必須是不同的
2、作用:把每個應用區別開,通過package name可以打開app
② android5.0之後,如何獲取當前頂端包名
//獲取到棧頂應用程序的包名
public String getTopActivty() {
String topPackageName="888";
//android5.0以上獲取方式
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
Intent intent = new Intent(Settings.ACTION_USAGE_ACCESS_SETTINGS);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
UsageStatsManager mUsageStatsManager = (UsageStatsManager) getSystemService(Context.USAGE_STATS_SERVICE);
long time = System.currentTimeMillis();
List<UsageStats> stats = mUsageStatsManager.queryUsageStats(UsageStatsManager.INTERVAL_DAILY, time - 1000 * 10, time);
if (stats != null) {
SortedMap<Long, UsageStats> mySortedMap = new TreeMap<Long, UsageStats>();
for (UsageStats usageStats : stats) {
mySortedMap.put(usageStats.getLastTimeUsed(), usageStats);
}
if (mySortedMap != null && !mySortedMap.isEmpty()) {
topPackageName = mySortedMap.get(mySortedMap.lastKey()).getPackageName();
Log.e("TopPackage Name", topPackageName);
}
}
}
//android5.0以下獲取方式
else{
List<ActivityManager.RunningTaskInfo> tasks = activityManager.getRunningTasks(1);
ActivityManager.RunningTaskInfo taskInfo = tasks.get(0);
topPackageName = taskInfo.topActivity.getPackageName();
}
return topPackageName;
}
③ 我想問一下,android開發時要引用第三方應用,我要怎麼知道程序的入口包名和主Activity呢,比較急呢
先通過下面的getPackages()方法獲得所有系統安裝的應用,根據列印出來的日誌找到你要找的應用的對應的包名,在調用startAppByPackageName()方法啟動應用就可以了,主activity不需要的
private ArrayList<PInfo> getPackages() {
ArrayList<PInfo> apps = getInstalledApps();
final int max = apps.size();
for (int i=0; i<max; i++) {
apps.get(i).prettyPrint();
}
return apps;
}
class PInfo {
private String appname = "";
private String pname = "";
private String versionName = "";
private int versionCode = 0;
private Drawable icon;
private void prettyPrint() {
Log.e("zhm",appname + "\t" + pname + "\t" + versionName + "\t" + versionCode);
}
}
private ArrayList<PInfo> getInstalledApps() {
ArrayList<PInfo> res = new ArrayList<PInfo>();
List<PackageInfo> packs = parent.getPackageManager().getInstalledPackages(0);
for(int i=0;i<packs.size();i++) {
PackageInfo p = packs.get(i);
if (p.versionName == null) {
continue ;
}
PInfo newInfo = new PInfo();
newInfo.appname = p.applicationInfo.loadLabel(parent.getPackageManager()).toString();
newInfo.pname = p.packageName;
newInfo.versionName = p.versionName;
newInfo.versionCode = p.versionCode;
newInfo.icon = p.applicationInfo.loadIcon(parent.getPackageManager());
res.add(newInfo);
}
return res;
}
public void startAppByPackageName(String packageName){
PackageInfo pi = null;
try {
pi = getPackageManager().getPackageInfo(packageName, 0);
} catch (NameNotFoundException e) {
e.printStackTrace();
}
Intent resolveIntent = new Intent(Intent.ACTION_MAIN, null);
resolveIntent.addCategory(Intent.CATEGORY_LAUNCHER);
resolveIntent.setPackage(pi.packageName);
List<ResolveInfo> apps = getPackageManager().queryIntentActivities(resolveIntent, 0);
ResolveInfo ri = apps.iterator().next();
if (ri != null ) {
String packageName1 = ri.activityInfo.packageName;
String className = ri.activityInfo.name;
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
ComponentName cn = new ComponentName(packageName1, className);
intent.setComponent(cn);
startActivity(intent);
}
}
④ 如何簡單快速獲取Android應用包名
一、
先說明一下這里講的方法是通用的,而網上其他方法獲取PackageName不通用(因為他是建立在root的基礎上的,我不敢保證你的設備已經root)。
①在android設備上點擊一下你要測試的應用,然後就不用操作設備了。
②在PC上的命令行輸入:adb logcat>D:/log.txt *:I
在這里的D:/log.txt你可以改成其他的路徑,但是一定要先確保路徑下沒有這個文件,不然的話你以前的文件就被改掉了,一定要小心。
③按下Ctrl+c先停掉(為了避免過多的新信息)。打開剛剛的那個文件D:/log.txt。從文件最下面開始找下面格式的信息
I/ActivityManager( 數字): Displayed 包名/類名: +數字ms
例如我的信息如下:
I/ActivityManager( 272): Displayed com.vane/.act.ActLauncher: +315ms
不過你可能會發現有很多這種格式的信息,到底哪個才是你需要的呢,如果你嚴格按照剛剛的步驟做的話,那麼很可能是最下面那條信息,即使不是那麼也肯定是最下面幾條信息中的某一條,這需要你根據應用進行辨別。
二、使用aapt工具
cmd中進入到aapt所在目錄,輸入
aapt mp badging 包絕對路徑
就可以看到包名和許可權等信息了
⑤ Android 怎麼樣獲得應用信息
程序大概分成三個部分:
1.獲取手機已安裝的所有應用package的信息(其中包括用戶自己安裝的,還有系統自帶的);
2.濾除系統自帶應用;
3.通過列表顯示出應用程序的圖標(icon),和其他文字信息(應用名稱,包名稱package name,版本號等等)
首先,我們定義一個數據結構,來保存應用程序信息(icon,name,packageName,versionName,versionCode,等)
下面我們就來看看代碼吧,這樣我們大家看的風直觀一些:
java代碼:
public class AppInfo {
public String appName="";
public String packageName="";
public String versionName="";
public int versionCode=0;
public Drawable appIcon=null;
public void print(){
Log.v("app","Name:"+appName+" Package:"+packageName);
Log.v("app","Name:"+appName+" versionName:"+versionName);
Log.v("app","Name:"+appName+" versionCode:"+versionCode);
}
}
然後我們通過PackageManager 來獲取已安裝的應用包信息。
java代碼:
ArrayList<AppInfo> appList = new ArrayList<AppInfo>(); //用來存儲獲取的應用信息數據List<PackageInfo> packages = getPackageManager().getInstalledPackages(0);
for(int i=0;i<packages.size();i++) {
PackageInfo packageInfo = packages.get(i);
AppInfo tmpInfo = new AppInfo();
tmpInfo.appName = packageInfo.applicationInfo.loadLabel(getPackageManager()).toString();
tmpInfo.packageName = packageInfo.packageName;
tmpInfo.versionName = packageInfo.versionName;
tmpInfo.versionCode = packageInfo.versionCode;
tmpInfo.appIcon = packageInfo.applicationInfo.loadIcon(getPackageManager());
appList.add(tmpInfo);
}//好啦 這下手機上安裝的應用數據都存在appList里了。
那麼如何判斷一個應用是否為系統應用呢?
java代碼:
if((packageInfo.applicationInfo.flags&ApplicationInfo.FLAG_SYSTEM)==0){
//非系統應用
}else{
//系統應用
}
所以如果只需要獲取到非系統應用信息,代碼如下:
java代碼:
ArrayList<AppInfo> appList = new ArrayList<AppInfo>(); //用來存儲獲取的應用信息數據
List<PackageInfo> packages = getPackageManager().getInstalledPackages(0);
for(int i=0;i<packages.size();i++) {
PackageInfo packageInfo = packages.get(i);
AppInfo tmpInfo = new AppInfo();
tmpInfo.appName = packageInfo.applicationInfo.loadLabel(getPackageManager()).toString();
tmpInfo.packageName = packageInfo.packageName;
tmpInfo.versionName = packageInfo.versionName;
tmpInfo.versionCode = packageInfo.versionCode;
tmpInfo.appIcon = packageInfo.applicationInfo.loadIcon(getPackageManager());
if((packageInfo.applicationInfo.flags&ApplicationInfo.FLAG_SYSTEM)==0){
appList.add(tmpInfo);//如果非系統應用,則添加至appList
}
}