我有一个Android应用程序,应该列出设备上的所有已安装的应用程序(没有root).我曾经尝试都getInstalledApplications(0)和getInstalledPackages(0)方法PackageManager,但在某些设备上,这显然是做安装了太多的应用程序,我得到"包经理人已去世" RuntimeException(我通过谷歌播放的错误报告服务接收它们).这是由于Android内部使用的IPC中每1次呼叫1MB的众所周知的限制.
如何解决这个问题?我不介意通过块请求长列表,但我没有看到任何方法.只有2种上述方法可供使用.
好的,我反编译了Skype的清单,以确定在通话过程中是否有任何服务或广播正在运行.来电只有几个内部广播.此外,只存在一个接收器和一个服务.
我使用我的应用程序监视所有正在运行的服务,但SkypeMainService始终在运行,即使不在通话中也是如此.
AudioModeskype 也没有改变(但根据开发人员想要的logcat-logs,但他们只是不这样做),所以我不能简单地检查它是否是MODE_IN_CALL.
如果Skype目前正在运行并且正在通话,您有什么建议吗?
谢谢!
/ edit:活动等的简要概述:
<activity android:name="com.skype.raider.Main">
<activity-alias android:name="com.skype.raider.ui.SplashScreenActivity" android:targetActivity="com.skype.raider.Main">
<receiver android:name="com.skype.MainReceiver" android:enabled="true" android:exported="false">
<action android:name="android.intent.action.BOOT_COMPLETED" />
<action android:name="android.intent.action.MEDIA_MOUNTED" />
<action android:name="android.intent.action.SEARCH" />
<action android:name="android.intent.action.CALL_PRIVILEGED" />
<action android:name="com.skype.raider.INCOMING_GSM_CALL" />
<action android:name="com.skype.raider.ON_GSM_CALL" />
<action android:name="com.skype.raider.intent.action.request_sync" />
</receiver>
<service android:name="com.skype.MainService">
Run Code Online (Sandbox Code Playgroud) I am getting a strange behavior, and I guess I'm more looking for an explanation than a solution (although solution is welcome as well!).
Here's the code:
PackageManager pm = context.getPackageManager();
List<PackageInfo> pkgList = pm.getInstalledPackages(PackageManager.GET_UNINSTALLED_PACKAGES);
if (pkgList == null)
return null;
for (PackageInfo pkgInfo : pkgList) {
ApplicationInfo appInfo = pkgInfo.applicationInfo;
// do some stuff, doesn't modify pkgInfo or appInfo or pkgList
}
Run Code Online (Sandbox Code Playgroud)
And on some occasions, I am getting error logs with:
java.lang.ClassCastException: cannot be cast to android.content.pm.PackageInfo
reported …
java android exception classcastexception android-package-managers
我知道有一种方法可以通过在styles.xml中定义来设置主题并使用它
setTheme(android.R.style.MyTheme);
Run Code Online (Sandbox Code Playgroud)
但是,我想从我开发的另一个应用程序中获取主题.我知道资源名称,实际上我能够使用此代码块获取主题ID;
Resources res = getPackageManager().getResourcesForApplication("com.example.theme");
int resThemeId = res.getIdentifier("my_theme","style","com.example.theme");
Run Code Online (Sandbox Code Playgroud)
当我调试时,我看到resThemeId不为零.
然后,我需要最后的命令来设置这个主题.在super.onCreate()函数之前,我尝试实现此方法,但它似乎无法正常工作
setTheme(resThemeId);
Run Code Online (Sandbox Code Playgroud)
但不是这样,如果我写下面的陈述,我工作正常
setTheme(android.R.style.Theme_Holo_Light);
Run Code Online (Sandbox Code Playgroud)
那么,我该怎么做才能使用来自不同包资源的主题呢?
我正在尝试设置我自己的服务器来托管apk文件,这些文件可用于客户端应用程序中的安装和更新.
在apk的新版本更新中,只有更新的部分应该在客户端下载.我能够在服务器端使用"bsdiff"生成补丁文件.但是在客户端,我应该如何将补丁文件与原始apk合并并安装更新.
android auto-update updates android-package-managers android-install-apk
我有一个在后台运行的服务来监控前台活动。目前这个不区分用户(多用户帐户Android 4.2)。有没有办法让服务可以将它运行的用户与前台活动的用户进行比较?我只对运行该服务的同一用户帐户的活动感兴趣。
我知道我可以使用:
android.os.Process.myUserHandle()
Run Code Online (Sandbox Code Playgroud)
获取运行服务的 UserHandle。但是我在文档中看不到任何可以为我提供正在运行的活动(ActivityManager.RunningAppProcessInfo 等)的 UserHandle 的内容。
有任何想法吗?
在Android 4.2+上使用intent安装apk时是否可以启用降级?我发现通过命令shell(使用-d)安装app时有可能,adb install -r -d <link to apk>所以我希望它也可以通过Intent以某种方式实现.我正在寻找一些旗帜或东西,但我没有找到任何有用的东西.
这是我打开包安装程序的意图:
Intent intent = new Intent(Intent.ACTION_VIEW);
Uri applicatonFileUri = Uri.fromFile(applicationFile);
intent.setDataAndType(applicatonFileUri, PACKAGE_TYPE);
startActivity(intent);
Run Code Online (Sandbox Code Playgroud) 我想通过使用PackageInfo将Application中的所有活动作为列表.请告诉我有没有办法做到这一点.
提前致谢.
我知道如何将应用程序安装到Android设备,例如从Play-Store或通过.apk文件.但我想了解实际的安装过程.
例如在Windows上:
.exe文件夹等)中到目前为止,我对Android应用程序安装过程的了解是:
在执行Android应用程序(安装后)后,新下载的数据将放置在以下位置:Android/data或Android/obb等.
如果由Android开发人员明确表达,文件也可以放在其他位置,例如二级存储(存储卡,云存储等)
但除此之外,我对Android安装过程的了解非常渺茫,例如:
我不知道在哪里放置了与Android程序执行相关的重要文件(在Windows的情况下,.exe,相关媒体,库等)
我同样不知道这些文件是如何在Android设备上构建的(安装后),例如这些文件是否构建在文件夹中,如:java,res,menu,layout等,就像在Android Studio等环境中开发一样?
我也不知道应用程序文件类型在安装后(从android安装文件或apk中解压缩后)存储在用户设备上的方式,例如它们存储为.java和/或.xml文件,如开发期间等.
希望有人可以填补空白,谢谢.
java android apk android-package-managers android-install-apk
getPackageManager().getLaunchIntentForPackage("com.example.app")我想自己创建启动意图,而不是常规方式。
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
intent.setPackage("com.example.app");
startActivity(intent);
Run Code Online (Sandbox Code Playgroud)
如果 Activitycom.example.app已安装、启用且具有正确的清单,为什么 Android 找不到 Activity ?(它与getLaunchIntentForPackage.完美配合。)