标签: android-package-managers

解决"包管理器已经死亡"的RuntimeException

我有一个Android应用程序,应该列出设备上的所有已安装的应用程序(没有root).我曾经尝试都getInstalledApplications(0)getInstalledPackages(0)方法PackageManager,但在某些设备上,这显然是做安装了太多的应用程序,我得到"包经理人已去世" RuntimeException(我通过谷歌播放的错误报告服务接收它们).这是由于Android内部使用的IPC中每1次呼叫1MB的众所周知的限制.

如何解决这个问题?我不介意通过块请求长列表,但我没有看到任何方法.只有2种上述方法可供使用.

android installed-applications android-package-managers

9
推荐指数
1
解决办法
2935
查看次数

如何确定Android上的Skype通话当前是否处于活动状态

好的,我反编译了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)

android skype android-package-managers

8
推荐指数
1
解决办法
4255
查看次数

Android ClassCastException with blank type

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

8
推荐指数
1
解决办法
462
查看次数

如何从android中的另一个应用程序资源更改主题?

我知道有一种方法可以通过在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)

那么,我该怎么做才能使用来自不同包资源的主题呢?

resources android themes android-package-managers

8
推荐指数
1
解决办法
1223
查看次数

Android应用更新的Delta更新

我正在尝试设置我自己的服务器来托管apk文件,这些文件可用于客户端应用程序中的安装和更新.

在apk的新版本更新中,只有更新的部分应该在客户端下载.我能够在服务器端使用"bsdiff"生成补丁文件.但是在客户端,我应该如何将补丁文件与原始apk合并并安装更新.

android auto-update updates android-package-managers android-install-apk

8
推荐指数
1
解决办法
1278
查看次数

如何在多用户系统中获取活动的 UserHandle

我有一个在后台运行的服务来监控前台活动。目前这个不区分用户(多用户帐户Android 4.2)。有没有办法让服务可以将它运行的用户与前台活动的用户进行比较?我只对运行该服务的同一用户帐户的活动感兴趣。

我知道我可以使用:

android.os.Process.myUserHandle()
Run Code Online (Sandbox Code Playgroud)

获取运行服务的 UserHandle。但是我在文档中看不到任何可以为我提供正在运行的活动(ActivityManager.RunningAppProcessInfo 等)的 UserHandle 的内容。

有任何想法吗?

android android-package-managers android-activity

7
推荐指数
2
解决办法
8805
查看次数

在Android 4.2+上使用intent安装apk时启用降级

在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)

android android-intent apk android-package-managers

7
推荐指数
1
解决办法
4268
查看次数

使用包名称获取所有活动

我想通过使用PackageInfo将Application中的所有活动作为列表.请告诉我有没有办法做到这一点.

提前致谢.

android package-managers android-package-managers

7
推荐指数
1
解决办法
7379
查看次数

"怎么样"Android应用程序(Facebook等)安装到Android手机?

我知道如何将应用程序安装到Android设备,例如从Play-Store或通过.apk文件.但我想了解实际的安装过程.

例如在Windows上:

  • 序列号等放在注册表中
  • 对软件运行很重要的文件放在Program Files文件夹(.exe文件)中

到目前为止,我对Android应用程序安装过程的了解是:

  • 在执行Android应用程序(安装后)后,新下载的数据将放置在以下位置:Android/dataAndroid/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

7
推荐指数
1
解决办法
2345
查看次数

为什么没有找到处理 Intent 的 Activity?

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.完美配合。)

android android-intent android-package-managers

7
推荐指数
2
解决办法
5054
查看次数