需要在java环境下取得apk应用程序名

需要在java环境下取得apk应用程序名,第1张

这个很简单,你需要使用PackageManager,你查看这个类,就知道怎么获取Android手机里所有的应用程序的应用名称了,我的程序在linux里,若你查找了 还没搞定我可以给你一段代码

// 获取packageManager对象

PackageManager packageManager = thisgetPackageManager();

/getInstalledApplications 返回当前设备上安装的应用包集合

ApplicationInfo对应着androidManifestxml中的application标签。通过它可以获取该application对应的信息

/

List<ApplicationInfo> applicationInfos = packageManagergetInstalledApplications(0);

以上是主要代码

applicationInfos里的是ApplicationInfo类,ApplicationInfo applicationInfo = applicationInfosget(i);

String packageName = applicationInfopackageName;// 包名

String packageLabel = packageManagergetApplicationLabel(applicationInfo)toString();

packageLabel 这个就是应用程序名称

1 首先,打开命令提示符(CMD),输入adb shell,进入shell环境;

2 输入pm list users查看当前多用户数量;

3 输入pm remove-user \u003cuser_id\u003e 删除指定的多用户,user_id是多用户的id编号;

4 重复步骤3,直到所有多用户均被删除。

linux安装软件的方式比较多,大概是:

1、rpm包,可以用rpm -qa

2、以deb包,可以用dpkg -l

3、yum方法,可以用yum list installed

4、如果是自己下载的源码包,那只能去找了

可执行程序通常都在/usr/bin目录下。

耳机控制需要使用Intent的,在intentjava(以下代码均来源于android44源码)中可以找到如下字段

public static final String ACTION_MEDIA_BUTTON ="androidintentactionMEDIA_BUTTON";

这就是android自己用于耳机控制播放器的intent action字段了,我们可以利用它来找到相关代码,很容易我们找到了这个类MediaFocusControl类,其中包含方法dispatchMediaKeyEvent():

private void dispatchMediaKeyEvent(KeyEvent keyEvent, boolean needWakeLock) {

Intent keyIntent = new Intent(IntentACTION_MEDIA_BUTTON, null);

mRCStackpeek()mMediaIntentsend(mContext,

needWakeLock WAKELOCK_RELEASE_ON_FINISHED : 0 ,

keyIntent, this, mEventHandler);

}

这里讲intent发送了出去,具体去了哪里我们不用 *** 心,我们只要知道谁用了这个intent。这里的mRCStack是一个Stack类,其中包含着我们需要的RemoteControlStackEntry类对象。我们继续查看,这个对象是在哪被放入Stack中的,最后找到pushMediaButtonReceiver_syncAfRcs()方法,其中关键部分如下:

private boolean pushMediaButtonReceiver_syncAfRcs(PendingIntent mediaIntent,

ComponentName target, IBinder token) {

if (!wasInsideStack) {

rcse = new RemoteControlStackEntry(this, mediaIntent, target, token);

}

mRCStackpush(rcse); //rcse被push进mRCStack

}

由此,可以知道这个rcse就是我们需要的对象,而他是被直接new出来的,则这个构造函数的参数就变的很重要了。查看构造函数如下:

public RemoteControlStackEntry(MediaFocusControl controller, PendingIntent mediaIntent,

ComponentName eventReceiver, IBinder token)

可以发现,里面包含了一个重要的ComponentName对象,这个对象在android中就带表着一个应用程序,看来这就是我们要找的音乐播放软件了。那么他是如何被系统拿出来的呢?我们继续找。在刚刚的构造方法创建对象过程中,这个参数是使用target变量直接放入的。而这个target是pushMediaButtonReceiver_syncAfRcs方法的一个参数,那么继续根据这个线索向上找。发现这个参量是经过registerMediaButtonIntent()传入,但是仍然是方法的一个参数,那么继续找,发现找到了源头:

protected void restoreMediaButtonReceiver() {

String receiverName = SettingsSystemgetStringForUser(mContentResolver,

SettingsSystemMEDIA_BUTTON_RECEIVER, UserHandleUSER_CURRENT);

ComponentName eventReceiver = ComponentNameunflattenFromString(receiverName);

registerMediaButtonIntent(pi, eventReceiver, null);

}

由此我们发现了ComponentName对象的创建过程,它使用了一个receiverName对象,这个是个String,他就是我们的目标了。这是用了system的一个方法来创建,进入发现他竟然是个hide的方法,无法作为api使用。后来分析了方法名才释然,这个适用于多用户的,android43以后准备加入用户系统,可惜还不完善所以不给我们用,这肯定是有一般方法的,很快找到了getString方法,其实他就是调用了getStringForUser而已,只是屏蔽了id的参数。但是还有一个小问题,其实SettingsSystemMEDIA_BUTTON_RECEIVER字段也是个hide字段,是不可以当做api来用的,我想这就系统根本就是不想提供获取正在播放音乐的软件的方法,不过既然是个字段就没问题了,我们查看一下源码就能看到MEDIA_BUTTON_RECEIVER字段其实就代表着"media_button_receiver"而已。到这里我们已经可以实现功能了。方法如下,其实就简单的三句即可:

================================功能实现===========================================

String receiverName = SettingsSystemgetString(thisgetContentResolver(),

"media_button_receiver");

ComponentName eventReceiver = ComponentNameunflattenFromString(receiverName);

String musicPlayerPkgName = eventReceivergetPackageName();

我们即可得到我们所需要的包名。

在Android中取得当前进程名

说明:上面代码关键的两个地方解释,也就是取得当前进程名

androidosProcessmyPid()) //获取PID,目前获取自己的也只有该API

ActivityManagerRunningAppProcessInfo类

说明: 封装了正在运行的进程信息

常用字段:

int pid 进程ID

int uid 进程所在的用户ID

String processName 进程名,默认是包名或者由Android:process=””属性指定

String [ ] pkgList 运行在该进程下的所有应用程序包名

android应用程序详细信息可以通过PackageManger管理类来获得,PackageManger管理所有程序包的信息,包括包名、label、icon、占用大小、是系统程序还是第三方程序等信息。

PackageManager pm = thisgetPackageManager(); // 获得PackageManager对象

Intent mainIntent = new Intent(IntentACTION_MAIN, null);

mainIntentaddCategory(IntentCATEGORY_LAUNCHER);

// 通过查询,获得所有ResolveInfo对象

List<ResolveInfo> resolveInfos = pm

queryIntentActivities(mainIntent, PackageManagerMATCH_DEFAULT_ONLY);

如果你希望获取某单个应用程序信息,只需要通过pm对象获取当中的包名,再与你想要获得应用程序的包名比较一下,再获取相应的属性就可经了。

在Android开发中,Context是一个非常重要的概念。它表示Android应用程序或组件的当前状态和信息。当您开发Uniapp插件时,可以使用Context来访问应用程序资源,如字符串、布局、等等。

在Uniapp插件开发中,您可以通过以下方式获取Context:

1 在Activity或Service中获取:如果您的插件需要在Activity或Service中执行 *** 作,则可以使用getContext()方法来获取当前的Context。

2 在Application中获取:如果您的插件需要在Application层面执行 *** 作,则可以使用getApplicationContext()方法来获取当前的Context。

3 从传入的参数中获取:有些情况下,您可能需要从外部传入一个Context,比如在创建Dialog时。这时候,您可以从传入的参数中获取Context。

请注意,在使用Context时需要避免内存泄漏和空指针等问题。例如,在创建Dialog时,应该使用Activity的Context而不是Application的Context,否则可能会导致内存泄漏。同时,也需要注意及时释放Context以避免空指针异常。

以上就是关于需要在java环境下取得apk应用程序名全部的内容,包括:需要在java环境下取得apk应用程序名、adb删除多用户、怎么在linux系统查看已安装应用的安装包名等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9744340.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-01
下一篇 2023-05-01

发表评论

登录后才能评论

评论列表(0条)

保存