标签: android-package-managers

无法从包中获取意图过滤器

我想列出软件包中存在的所有意图过滤器。

我正在尝试使用PackageManager类。我在获取PackageInfo对象时设置了标志PackageManager.GET_INTENT_FILTERS。但是我不知道如何使用它。

我能够使用相应的标志获取与活动和接收者相关的所有信息,但是不知道如何进行意图过滤器。

任何想法如何解决这个问题?

android intentfilter android-intent android-package-managers

5
推荐指数
1
解决办法
862
查看次数

使用Gradle覆盖库项目清单中的applicatoinID

我有一个引用库项目的主项目.它们都是用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的清单文件中,一切正常.

有谁知道这是否可以实现以及如何实现?

android android-package-managers android-gradle-plugin

5
推荐指数
1
解决办法
1469
查看次数

Android Lollipop - PackageInstaller.Session commit()

我只是尝试使用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

5
推荐指数
2
解决办法
3441
查看次数

获取可共享数据的应用程序列表

此代码显示默认共享对话框

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)

分享对话

问题:我没有在默认系统对话框中显示应用程序列表,而是希望获取应用程序列表并在我的自定义列表中显示它们.

android android-package-managers

5
推荐指数
1
解决办法
871
查看次数

PackageManager#installPackage 不适用于 Android N

当使用构建工具版本 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

5
推荐指数
1
解决办法
867
查看次数

即使存在 try/catch 块,应用程序也会因空对象引用上的“boolean android.content.Intent.migrateExtraStreamToClipData()”崩溃

我正在尝试使用软件包名称打开某些应用程序,为此我使用了以下代码:

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

5
推荐指数
1
解决办法
3718
查看次数

如何检测设备是否有3.5毫米音频插孔?

我已经阅读了很多帖子和论坛文章,但没有找到任何与我的要求相关的内容.很多新的Android设备都没有内置耳机插孔,我不需要处理这些设备.

通过PackageManger我只能检测功能AUDIO_OUTPUT.

有没有有效的方法可以检查设备中是否存在3.5毫米音频插孔?

audio android android-package-managers

5
推荐指数
1
解决办法
276
查看次数

Android - 使用 PackageInstaller 和 PackageInstaller.Session 静默安装 APK

查看 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

5
推荐指数
1
解决办法
5138
查看次数

PackageManager 死了 - DeadObjectException - 小包裹上的交易失败

我有一个非常简单的功能,如下所示:

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 android-package-managers

5
推荐指数
1
解决办法
1195
查看次数

Android App Bundle 检查缺少的拆分会导致“RuntimeException: Package manager has dead”

我按照本指南将检查集成到我的应用程序中,以防止在使用 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

5
推荐指数
0
解决办法
904
查看次数