精华内容
下载资源
问答
  • Android 获取自身包名

    2021-12-02 22:13:50
    android 获取自身包名

    Android 获取自身包名

    PackageManager manager = this.getPackageManager();
    try {
        PackageInfo info = manager.getPackageInfo(this.getPackageName(), 0);
        Log.d("TAG", "自身包名为:"+info);
    } catch (PackageManager.NameNotFoundException e) {
        e.printStackTrace();
    }
    

    我是Mr-老鬼、QQ1156346325 。交流QQ群:620028786,647082990,772810035
    ————————————————版权声明——————————————————
    本文版权所有~Mr-老鬼 ~转载请注明原文地址
    免责声明:本文所有的教程仅限交流学习使用不得用于违法用途,造成的法律后果本人不承担责任。

    展开全文
  • 有时候我们需要判断栈顶的应用是否是我们的应用,于是获取栈顶的应用包名的需求就出现了。在android5.0之前,系统提供了一套API可以实现这个功能。ActivityManager manager = (ActivityManager) ...

    有时候我们需要判断栈顶的应用是否是我们的应用,于是获取栈顶的应用包名的需求就出现了。

    在android5.0之前,系统提供了一套API可以实现这个功能。

    ActivityManager manager = (ActivityManager) getApplicationContext().getSystemService(ACTIVITY_SERVICE);

    String currentClassName = manager.getRunningTasks(1).get(0).topActivity.getPackageName();

    但是在android5.0之后,这个getRunningTasks()过时了,google做了限制,不让获取第三方的应用任务栈,只能获取自己的应用和Launcher桌面的包名。

    当然天无绝人之路,在android5.0之后,android提供了UsageStatsManager的方式来获取栈顶的应用包名(并非直接获取,需要处理)。

    UsageStatManager是一个使用情况统计管理者,通过它可以获取应用的使用情况,通过List集合来记录APP的使用情况,通过UsageStats对象可以获取包名,最后的在前台的时间,在前台的次数等等。

    他需要权限:

    android:name="android.permission.PACKAGE_USAGE_STATS"

    tools:ignore="ProtectedPermissions" />

    这个权限是需要系统授权的,系统不授权获取不到数据。

    下面看下实现案例:

    ForegroundAppUtils:将获取前台包名等方法封装成一个工具类

    public class ForegroundAppUtil {

    private static final long END_TIME = System.currentTimeMillis();

    private static final long TIME_INTERVAL = 7 * 24 * 60 * 60 * 1000L;

    private static final long START_TIME = END_TIME - TIME_INTERVAL;

    /**

    * 获取栈顶的应用包名

    */

    public static String getForegroundActivityName(Context context) {

    String currentClassName = "";

    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {

    ActivityManager manager = (ActivityManager) context.getApplicationContext().getSystemService(Context.ACTIVITY_SERVICE);

    currentClassName = manager.getRunningTasks(1).get(0).topActivity.getPackageName();

    } else {

    UsageStats initStat = getForegroundUsageStats(context, START_TIME, END_TIME);

    if (initStat != null) {

    currentClassName = initStat.getPackageName();

    }

    }

    return currentClassName;

    }

    /**

    * 判断当前应用是否在前台

    */

    public static boolean isForegroundApp(Context context) {

    return TextUtils.equals(getForegroundActivityName(context), context.getPackageName());

    }

    /**

    * 获取时间段内,

    */

    public static long getTotleForegroundTime(Context context) {

    UsageStats usageStats = getCurrentUsageStats(context, START_TIME, END_TIME);

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {

    return usageStats != null ? usageStats.getTotalTimeInForeground() : 0;

    }

    return 0;

    }

    /**

    * 获取记录前台应用的UsageStats对象

    */

    private static UsageStats getForegroundUsageStats(Context context, long startTime, long endTime) {

    UsageStats usageStatsResult = null;

    if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {

    List usageStatses = getUsageStatsList(context, startTime, endTime);

    if (usageStatses == null || usageStatses.isEmpty()) return null;

    for (UsageStats usageStats : usageStatses) {

    if (usageStatsResult == null || usageStatsResult.getLastTimeUsed() < usageStats.getLastTimeUsed()) {

    usageStatsResult = usageStats;

    }

    }

    }

    return usageStatsResult;

    }

    /**

    * 获取记录当前应用的UsageStats对象

    */

    public static UsageStats getCurrentUsageStats(Context context, long startTime, long endTime) {

    if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {

    List usageStatses = getUsageStatsList(context, startTime, endTime);

    if (usageStatses == null || usageStatses.isEmpty()) return null;

    for (UsageStats usageStats : usageStatses) {

    if (TextUtils.equals(usageStats.getPackageName(), context.getPackageName())) {

    return usageStats;

    }

    }

    }

    return null;

    }

    /**

    * 通过UsageStatsManager获取List集合

    */

    public static List getUsageStatsList(Context context, long startTime, long endTime) {

    if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {

    UsageStatsManager manager = (UsageStatsManager) context.getApplicationContext().getSystemService(Context.USAGE_STATS_SERVICE);

    //UsageStatsManager.INTERVAL_WEEKLY,UsageStatsManager的参数定义了5个,具体查阅源码

    List usageStatses = manager.queryUsageStats(UsageStatsManager.INTERVAL_BEST, startTime, endTime);

    if (usageStatses == null || usageStatses.size() == 0) {// 没有权限,获取不到数据

    Intent intent = new Intent(Settings.ACTION_USAGE_ACCESS_SETTINGS);

    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

    context.getApplicationContext().startActivity(intent);

    return null;

    }

    return usageStatses;

    }

    return null;

    }

    }

    在MainActivity中启动service,在service中每5秒获取一次前台应用包名。

    MainActivity

    public class MainActivity extends AppCompatActivity {

    @Override

    protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_main);

    startService(new Intent(getApplicationContext(),MyService.class));

    }

    }

    MyService

    public class MyService extends Service {

    @Override

    public IBinder onBind(Intent intent) {

    return null;

    }

    private Handler handler = new Handler();

    private Runnable r = new Runnable() {

    @Override

    public void run() {

    String foregroundActivityName = ForegroundAppUtil.getForegroundActivityName(getApplicationContext());

    Toast.makeText(getApplicationContext(), foregroundActivityName, Toast.LENGTH_SHORT).show();

    handler.postDelayed(r, 5000);

    }

    };

    @Override

    public void onCreate() {

    super.onCreate();

    }

    @Override

    public int onStartCommand(Intent intent, int flags, int startId) {

    handler.postDelayed(r, 5000);

    return START_STICKY;

    }

    }

    AndroidManifest.xml权限

    android:name="android.permission.PACKAGE_USAGE_STATS"

    tools:ignore="ProtectedPermissions" />

    以上这篇Android获取栈顶的应用包名方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

    展开全文
  • package ...import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.app.AlertDialog;import java.util.List;import android.content.pm.ApplicationInf...

    package com.example.netfairy.test;

    import android.support.v7.app.AppCompatActivity;

    import android.os.Bundle;

    import android.app.AlertDialog;

    import java.util.List;

    import android.content.pm.ApplicationInfo;

    import android.content.pm.PackageInfo;

    import android.content.pm.PackageManager;

    import android.content.pm.PackageManager.NameNotFoundException;

    public class MainActivity extends AppCompatActivity {

    PackageManager packageManager;

    @Override

    protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_main);

    packageManager = getPackageManager();

    List list = packageManager.getInstalledPackages(PackageManager.GET_PERMISSIONS);

    StringBuilder stringBuilder = new StringBuilder();

    for (PackageInfo packageInfo : list) {

    if(!isSystemApplication(packageInfo.packageName)) {

    stringBuilder.append("包名:" + packageInfo.packageName + "\n");

    stringBuilder.append("版本:" + packageInfo.versionName + "\n");

    ApplicationInfo applicationInfo = packageInfo.applicationInfo;

    stringBuilder.append("应用名称:" + applicationInfo.loadLabel(packageManager) + "\n");

    stringBuilder.append("权限:" + ListPermissionInfo(packageInfo.packageName) + "\n");

    stringBuilder.append("\n\n\n");

    }

    }

    new AlertDialog.Builder(MainActivity.this)

    .setTitle("APP信息")

    .setMessage(stringBuilder) //调用

    .setPositiveButton("关闭", null)

    .show();

    }

    public boolean isSystemApplication(String packageName){

    try {

    PackageInfo packageInfo = packageManager.getPackageInfo(packageName, PackageManager.GET_CONFIGURATIONS);

    if((packageInfo.applicationInfo.flags & android.content.pm.ApplicationInfo.FLAG_SYSTEM)!=0){

    return true;

    }

    }

    catch (NameNotFoundException e) {

    e.printStackTrace();

    }

    return false;

    }

    public String ListPermissionInfo(String packageName) {

    PackageInfo pi;

    StringBuilder s = new StringBuilder();

    try {

    pi = packageManager.getPackageInfo(packageName, PackageManager.GET_PERMISSIONS);

    String[] permissions = pi.requestedPermissions;

    if (permissions != null) {

    for (String str : permissions) {

    s.append("\n" + str);

    }

    }

    }

    catch (NameNotFoundException e) {

    e.printStackTrace();

    }

    return s.toString();

    }

    }

    96868f92162c95e7b8459fd444566f2b.png

    展开全文
  • 1.插上数据线连接真机或模拟器,在PC上的cmd中敲命令命令行:...图中,package是包名,launchable activity name是启动的activity2.重签名工具re-sign.jar右键re-sign.jar,在“打开方式”里,选择“Java(TM) ...

    1.插上数据线连接真机或模拟器,在PC上的cmd中敲命令

    命令行:aapt dump badging xxx.apk

    或者在手机上安装终端模拟器apk,输入命令也是一样

    数据线被掳走了,网上找了张图。图中,package是包名,launchable activity name是启动的activity

    91fd0525c4b1

    2.重签名工具re-sign.jar

    右键re-sign.jar,在“打开方式”里,选择“Java(TM) Platform SE binary”选项,打开之后把apk拖进去,选中一个保存位置,点击“保存”按钮,完成之后。会弹出apk的包名和主类名,如下图

    91fd0525c4b1

    3.手机中安装包名查看器,就是app都会用。。。

    4.想起来我电脑上还有一个软件APK-Info,也可以看到

    91fd0525c4b1

    5.源码中AndriodManifest.xml查看。前提是你得能接触到源码

    6.adb命令收集日志(不推荐)

    adb logcat >d:/aaa.txt

    7.最后一个,直接问开发人员要

    8.要看到设备上安装的所有软件包,可以使用adb命令

    adb shell pm list packages

    展开全文
  • plintPkgAndCls(getResolveInfos());private void plintPkgAndCls(List resolveInfos){ for (int i = 0; i < resolveInfos.size(); i++) { String pkg = resolveInfos.get(i).activityInfo.packageName;...
  • 小记:自学过程中,经常需要用得到一个APK的包名,总结一下得到包名的几种方式。**********************2014-10-29:初版2014-10-30:完善**********************----------------------------------------------------...
  • Android获取包名的方法

    2021-05-13 23:16:12
    方法一:adb shell pm list package -f将获取手机内所有apk对应的包名和路径方法二:adb shell dumpsys window w | findstr \/ | findstr name=先打开需要查找的apk后,再敲入以上命令方法三:C:\Users\...
  • 获取app的包名和activity名称(1)adb logcat | findstr START然后点击appCMD界面,cmp= 后面的值就是 包名/activity名称例如: cmp=com.shanjian.originaldesign/.activity.other.Activity_In(2)aapt dump badging D:...
  • public static String getCurrentAppPackage(Context context) {String result = "";ActivityManager manager = (ActivityManager) context.getSystemService(Context.ACTIVITY_...if (android.os.Build.VERSI...
  • 为了做应用锁需要获取当前运行应用的包名。 直接上代码,通过遍历应用栈查找当前运行的应用。 import android.app.ActivityManager; import android.app.usage.UsageStats; import android.app.usage....
  • 根据包名获取进程pid

    2021-06-12 07:07:33
    根据包名获取进程pid: ActivityManager am = (ActivityManager)context.getSystemService(Context.ACTIVITY_SERVICE);List mRunningProcess = am.getRunningAppProcesses();int pid=-1;//int i = 1;for ...
  • 更多获取app包名方法

    2021-06-10 09:19:58
    表白:我越想睡越怕黑,越醒着越怕鬼,越爱她越是自卑,疑神疑鬼讲解对象:更多获取app包名方法作者:融水公子 rsgz方法1:d.app_current()原理:显示正在运行的app包名importuiautomator2asu2#连接手机d=u2.connect...
  • 前言小菜因为工作需要,经常需要一套代码修改很多次包名,虽然不是什么技术活,但是小菜的用的次数多了就有了一点点小技巧分享给大家,下面话不多说了,来一起看看详细的介绍吧。方法如下:1. 如果源码是在本机电脑...
  • android 有时需要获取当前运行的包名,做相应的操作在android 5.0之前可以使用String topAppActivityManager mActivityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);...
  • 在做项目时,无论为了功能还是调试,很多时候都需要获取到当前类的类名,包名,路径等等。 在这里总结一下,以便总结和以后需要的时候更快的解决问题。 1.在当前类获取当前的类名: strings.add(getClass()....
  • 方法一:adb shell pm list package -f将获取手机内所有apk对应的包名和路径方法二:adb shell dumpsys window w | findstr \/ | findstr name=先打开需要查找的apk后,再敲入以上命令 备注:此方法不一定准确。...
  • for(Element ele : elements) { //获取包名 appPackageName = ele.attr("data-pn"); //获取图标网址 imageEle = ele.select("img.icon"); appImageUrl = imageEle.get(0).attr("src").replace("68_68", "256_256");...
  • //frameworks/base/core/java/android/app/ActivityThread.java public static ActivityThread currentActivityThread() { return sCurrentActivityThread; } public String currentActivityName(){ String ...
  • 我想从应用程序名称获取应用程序名称。有人请告诉我怎么可以得到这个。public class AppInstalledListener extends BroadcastReceiver{@Overridepublic void onReceive(Context context, Intent intent) {// TODO ...
  • } holder.tv_pakagename.setText("包名:" + allProcess.get(position).get("packageName").toString()); holder.tv_versioncode.setText("VersionCode:" + allProcess.get(position).get("versionCode").toString()...
  • [原创]TaintDroid中通过PID获取应用包名的思考2013-8-12 21:196961[原创]TaintDroid中通过PID获取应用包名的思考2013-8-12 21:196961标 题: 【原创】TaintDroid中通过PID获取应用包名的思考作 者: 蟑螂一号时 间: ...
  • 通过该方法来检测是否安装某个应用,一直用的好好的,但是在app发布新版本以后Android11的用户反馈无法出错了 一开始怀疑是否方法有问题,用了各种方法都没有效果都不好用,但是以前的旧版本是可以正常使用的 后来...
  • Android 7.0开始,按包名查找进程ID的最简单方法是使用pidof命令:usage: pidof [-s] [-o omitpid[,omitpid...]] [NAME]...Print the PIDs of all processes with the given names.-s single shot, only return one...
  • uses-permission android:name="android.permission.PACKAGE_USAGE_STATS" tools:ignore="ProtectedPermissions"/> 2,跳转用户授权界面 public boolean checkUsageStats() { AppOpsManager appOpt = ...
  • 通过以下方式来获取前台进程的包名:1.android api 10-20通过ActivityManager中getRunningTasks来获取。2.android api 21- 22(部分没有升级google更新)由于系统在api 21以上禁用getRunningTasks接口。通过...
  • 在这之前我一直使用ActivityManager获取前台运行包名,因为APP有系统签名的问题在Android6.0并没有受到API限制,在Android6.0用上系统签名使用ActivityManager.getRunningAppProcesses()一切正常,不过这些天在...
  • Android获取渠道名称

    2021-05-28 04:22:30
    那么就需要在和服务器交互之前,先获取应用软件的渠道标识,才能进一步完成后续地相关操作。渠道名称图1. 设置渠道号...android:name="UMENG_APPKEY"android:value="xxxxxxxxxxxxxxxx" />android:name="UMENG_...
  • 效果图:说明:第一行:应用程序名称第二行:应用程序包名第三行:应用程序入口Activity名称代码如下:package com.hello.project;import java.util.ArrayList;import java.util.Collections;import java.util....
  • ApkInfo apkInfo = GetApkInfo.getApkInfoByFilePath("D:\\DefaultApkTempSaveFolder\\3G安卓市场\\com.jiubang.market.apk"); System.out.println(apkInfo); } catch (IOException e) { e.printStackTrace(); } } ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 393,286
精华内容 157,314
关键字:

安卓获取自己的包名