这个很简单,你需要使用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系统查看已安装应用的安装包名等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)