我想列出软件包中存在的所有意图过滤器。
我正在尝试使用PackageManager类。我在获取PackageInfo对象时设置了标志PackageManager.GET_INTENT_FILTERS。但是我不知道如何使用它。
我能够使用相应的标志获取与活动和接收者相关的所有信息,但是不知道如何进行意图过滤器。
任何想法如何解决这个问题?
android intentfilter android-intent android-package-managers
我有一个引用库项目的主项目.它们都是用Gradle编译的.
这是主项目gradle文件的defaultConfig:
defaultConfig {
applicationId "com.example.app"
minSdkVersion 15
targetSdkVersion 21
versionCode 2
versionName "1.0"
}
Run Code Online (Sandbox Code Playgroud)
这是库项目gradle文件的defaultConfig:
defaultConfig {
minSdkVersion 11
targetSdkVersion 21
versionCode 1
versionName "1.0"
}
Run Code Online (Sandbox Code Playgroud)
如您所见,我没有在库中声明任何applicationId.
我在我的库项目中定义了一个权限,如下所示:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.library">
<permission android:name="${applicationId}.permission.C2D_MESSAGE"
android:protectionLevel="signature" />
Run Code Online (Sandbox Code Playgroud)
构建项目时,applicationId将替换为com.example.library(库包名称).这不是我想要的.我想用com.example.app替换它,因为它是我的应用程序的applicationId.
如果我将$ {applicationID}占位符放在app的清单文件中,一切正常.
有谁知道这是否可以实现以及如何实现?
我只是尝试使用PackageInstaller和PackageManager API在我的设备上安装软件包(从运行它的设备所有者应用程序).我一直在寻找例子但找不到符合我需要的东西.
以下是我安装Facebook应用程序的代码示例:
PackageManager pm = getPackageManager();
PackageInstaller mPackageInstaller = pm.getPackageInstaller();
PackageInstaller.SessionParams mSessionParams = new PackageInstaller.SessionParams(SessionParams.MODE_FULL_INSTALL);
mSessionParams.setReferrerUri(Uri.parse("file:///mnt/sdcard/Download/Facebook.apk"));
int mSessionId = mPackageInstaller.createSession( mSessionParams );
PackageInstaller.Session mPkgSession = PackageInstaller.openSession(mSessionId);
OutputStream mOStream = mPkgSession.openWrite("com.facebook.katana", 0, -1);
mPkgSession.fsync(mOStream);
Run Code Online (Sandbox Code Playgroud)
我想,我需要启动的下一个功能是"提交(IntentSender statusReceiver)".
所以请告诉我如何使用commit(),特别是如何声明一个正确的IntentSender来安装存储在/ sdcard中的APK.
谢谢 !!
android android-package-managers android-install-apk android-5.0-lollipop packageinstaller
此代码显示默认共享对话框
Intent sharingIntent = new Intent(Intent.ACTION_SEND);
sharingIntent.setType("text/html");
sharingIntent.putExtra(android.content.Intent.EXTRA_TEXT, "Message"));
startActivity(Intent.createChooser(sharingIntent,"Share using"));
Run Code Online (Sandbox Code Playgroud)

问题:我没有在默认系统对话框中显示应用程序列表,而是希望获取应用程序列表并在我的自定义列表中显示它们.
当使用构建工具版本 24 和带有 N 图像 (npd56n) 的 Android 设备时,我无法使用 PackageManager#installPackage 安装包。
当带有file:方案的URI传递给方法时,返回 -3,我假设它是INSTALL_FAILED_INVALID_URI。
当使用 FileProvider( content:scheme)创建的 URI传递给方法时,抛出异常:
Caused by: java.lang.UnsupportedOperationException: Only file:// URIs are supported
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
android android-package-managers android-fileprovider android-7.0-nougat
我正在尝试使用软件包名称打开某些应用程序,为此我使用了以下代码:
public void openAppHavingPackageName(String packageName, String appName) {
try {
Intent intent = getBaseContext().getPackageManager().getLaunchIntentForPackage(packageName);
startActivity(intent);
} catch (ActivityNotFoundException e) {
Log.e(TAG, e.getMessage());
}
}
Run Code Online (Sandbox Code Playgroud)
当我尝试打开手机中安装的应用程序时,它工作正常,但是当我尝试打开手机中没有的应用程序时,应用程序崩溃并出现以下错误:
java.lang.NullPointerException: Attempt to invoke virtual method 'boolean android.content.Intent.migrateExtraStreamToClipData()' on a null object reference
在线上
startActivity(intent);
如您所见,我在try/catch那里有一个块,那么为什么没有捕获异常,而是运行代码导致崩溃?
android try-catch nullpointerexception android-package-managers activitynotfoundexception
我已经阅读了很多帖子和论坛文章,但没有找到任何与我的要求相关的内容.很多新的Android设备都没有内置耳机插孔,我不需要处理这些设备.
通过PackageManger我只能检测功能AUDIO_OUTPUT.
有没有有效的方法可以检查设备中是否存在3.5毫米音频插孔?
查看 Android (AOSP) 的来源,installPackage标记为已弃用并检查 Android 的 PackageManager 应用程序,它使用PackageInstaller该类创建一个PackageInstaller.Session实例来执行 APK 的安装。
我正在尝试在我的应用程序中做同样的事情。我使用系统密钥签名,并且我确实INSTALL_PACKAGES在清单中包含了权限。
这是我的代码:
val packageName = "com.spotify.music"
val inputStream = File(filesDir, "spotify.apk").inputStream()
// ...
val packageInstaller = context.packageManager.packageInstaller
val params = PackageInstaller.SessionParams(PackageInstaller.SessionParams.MODE_FULL_INSTALL)
params.setAppPackageName(packageName)
val sessionId = packageInstaller.createSession(params)
val session = packageInstaller.openSession(sessionId)
val out = session.openWrite("COSU", 0, -1)
inputStream.copyTo(out)
session.fsync(out)
inputStream.close()
out.close()
session.commit(null)
Run Code Online (Sandbox Code Playgroud)
但是,我收到以下奇怪的空指针异常:
Error while installing: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.app.AppOpsManager.checkPackage(int, java.lang.String)' on a null object reference
有人知道这里出了什么问题吗?
android android-source silent-installer android-package-managers kotlin
我有一个非常简单的功能,如下所示:
public static boolean isAppInstalled(String packageName) {
PackageManager pm = MainApp.get().getPackageManager();
try {
pm.getPackageInfo(packageName, PackageManager.GET_ACTIVITIES);
return true;
} catch (PackageManager.NameNotFoundException e) {
return false;
}
}
Run Code Online (Sandbox Code Playgroud)
有时这会在getPackageInfo具有以下堆栈跟踪的行上崩溃:
java.lang.RuntimeException: Package manager has died
at android.app.ApplicationPackageManager.getPackageInfo(ApplicationPackageManager.java:151)
... code in my app => getPackageInfo line above ...
Caused by: android.os.DeadObjectException: Transaction failed on small parcel; remote process probably died
at android.os.BinderProxy.transactNative(Native Method)
at android.os.BinderProxy.transact(Binder.java:505)
at android.content.pm.IPackageManager$Stub$Proxy.getPackageInfo(IPackageManager.java:2151)
at android.app.ApplicationPackageManager.getPackageInfo(ApplicationPackageManager.java:145)
...
Run Code Online (Sandbox Code Playgroud)
任何想法为什么会发生这种情况?我认为这样的事情只有在同时安装/卸载应用程序时才会发生,但我有一个用户可以重复这个并且总是得到这个例外。
我按照本指南将检查集成到我的应用程序中,以防止在使用 Android App Bundles(用于丢失资源)时在运行时崩溃。
我onCreate()在超级调用之前的方法中将以下代码添加到我的应用程序类中:
if (MissingSplitsManagerFactory.create(this).disableAppIfMissingRequiredSplits()) {
// Skip app initialization.
return
}
Run Code Online (Sandbox Code Playgroud)
这在我自己的测试设备上没有问题。但是,如果我将 Android App Bundle 上传到 Google Play,预发布报告中的某些设备会出现此异常:
FATAL EXCEPTION: main
Process: com.example, PID: 25603
java.lang.RuntimeException: Unable to create application com.example.App: java.lang.RuntimeException: Package manager has died
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4858)
at android.app.ActivityThread.access$1600(ActivityThread.java:163)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1423)
at android.os.Handler.dispatchMessage(Handler.java:102)com.example
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5585)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:730)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:620)
Caused by: java.lang.RuntimeException: Package manager has died
at android.app.ApplicationPackageManager.getPackageInfo(ApplicationPackageManager.java:136)
at Cfa.a(SourceFile)
at com.example.App.onCreate(SourceFile:17)
at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1014)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4855)
... …Run Code Online (Sandbox Code Playgroud) android android-package-managers google-play android-application-class android-app-bundle