我已经在这里和其他地方找到了关于创建发送电子邮件的意图的各种主题,这看起来非常简单.我正在寻找启动用户可能拥有的任何电子邮件客户端的意图.
这是我看到的用于发送电子邮件的代码(仅供参考,这不符合我的需求,因为我不想发送新消息):
Intent i = new Intent(Intent.ACTION_SEND);
i.setType("text/plain");
i.putExtra(Intent.EXTRA_EMAIL , new String[]{"recipient@example.com"});
i.putExtra(Intent.EXTRA_SUBJECT, "Subject of the message");
i.putExtra(Intent.EXTRA_TEXT , "Body of the message");
Run Code Online (Sandbox Code Playgroud)
以下是我根据包名称专门启动Gmail客户端的代码:
PackageManager pm = getPackageManager();
Intent intent = pm.getLaunchIntentForPackage("com.google.android.gm");
startActivity(intent);
Run Code Online (Sandbox Code Playgroud)
上述代码有效但不灵活,因为用户可能没有使用Gmail,而是使用其他内置电子邮件应用程序或第三方电子邮件应用程序.我正在寻找一个能够在这种情况下调出选择器的意图,以便用户可以决定启动哪个应用来阅读电子邮件.
有谁知道如何做到这一点?
我想获取Android中安装的第三方应用程序的名称和包名称.我试过但我得到了所有应用程序的名称(第三方和预安装).
如何识别应用程序是系统应用程序还是其他应用程序?
我想检测用户何时安装或删除应用程序,但我没有找到BroadcastReceiver这样做.
在我的应用程序中,我获得了有关已安装的应用程序的信息PackageManager,但我不想定期扫描应用程序.有没有BroadcastReceiver这样做?还是任何ContentObserver?是否可以获得已安装或删除应用程序的通知?
android broadcastreceiver android-package-managers contentobserver
我正在为Play商店准备我的应用程序,并计划将一个组件作为单独的安装包交付(因为我的客户无法恢复源代码,但是该应用程序已用他的密钥签名)。我考虑了两种方法。我的需求就是这些:停用“未知来源”的用户应该能够安装第二个应用程序。并且:永远不要将用户重定向到Google Play商店。
这两个应用程序都是免费的。
我一直在寻找可以让我从Google Play下载额外的APK并仅向用户显示安装屏幕以接受安装的解决方案。我想要一个解决方案,向PlayStore应用发送意向,并显示应用名称,权限和安装按钮。我什么都没找到。任何人在这里有经验吗?
我以为可以将这个额外的应用程序打包到我的封闭应用程序的资产中。我需要将其写入文件系统,并向系统发送安装软件包的意图。问题:该应用程序未从Google Play加载,并且其来源未知。如果我使用PackageManager并允许其安装APK,INSTALL_PACKAGES权限是否允许我的应用程序在用户设备上安装此第二个应用程序(因为用户已经接受我的应用程序可以安装软件包)?
我希望有人可以帮忙。并预先感谢您。
permissions android install package android-package-managers
这是我的代码
Intent intent = new Intent(Intent.ACTION_DELETE);
intent.setData(Uri.parse("package:" + theApp.getAppOpen()));
startActivity(intent);
Run Code Online (Sandbox Code Playgroud)
调用 startActivity 时,会出现一个默认提示,询问用户是否要卸载该应用程序。
如何判断用户是否说“确定”卸载应用程序?假设我的应用程序不是要卸载的应用程序。
我想在我的应用程序中使用" android.permission.PACKAGE_USAGE_STATS ".这里说的是注意:此API需要权限android.permission.PACKAGE_USAGE_STATS,这是系统级权限,不会授予第三方应用程序.但是,声明权限意味着使用API的意图,并且设备的用户可以通过"设置"应用程序授予权限.

似乎我需要用户明确授予我的应用程序访问权限访问权限的权限.
此外,我使用下面的意图代码打开屏幕,允许用户访问我的应用程序,但我的应用程序不在列表中.我使用的代码:
Intent intent = new Intent(Settings.ACTION_USAGE_ACCESS_SETTINGS);
startActivity(intent);
Run Code Online (Sandbox Code Playgroud)
当*startActivity(intent)'被触发(或进入*设置>安全性>使用用户访问的应用程序)时,弹出一个空白屏幕,我的应用程序不属于它. 
底线问题是 - 如何在Android Lollipop中使用UsageStatsManager?有人试过吗?
有这个代码(取自/sf/answers/351163711/):
private boolean isAppInstalled(String packageName) {
PackageManager pm = getPackageManager();
boolean installed = false;
try {
pm.getPackageInfo(packageName, PackageManager.GET_ACTIVITIES);
installed = true;
} catch (PackageManager.NameNotFoundException e) {
installed = false;
}
return installed;
}
Run Code Online (Sandbox Code Playgroud)
但我不知道在 packageName 中放什么。我尝试过com.google.android.gms.wallet(这是Android Pay使用的一些钱包片段的包),但上述方法返回false。
android package-managers android-package-managers android-pay
我有一个试图访问(TelephonyManager) getActivity().getSystemService(Context.TELEPHONY_SERVICE);它的登录片段适用于Lollipop 5.1之前的设备.当我在Marshmallow 6.01中尝试它时,它显示了安全性异常.所以我从android docs添加了代码来请求运行时权限.这是代码
int permissionCheck = ContextCompat.checkSelfPermission(getActivity(),Manifest.permission.READ_SMS);
if (permissionCheck != PackageManager.PERMISSION_GRANTED) {
// Should we show an explanation?
if (ActivityCompat.shouldShowRequestPermissionRationale(getActivity(), Manifest.permission.READ_SMS)) {
// Show an expanation to the user *asynchronously* -- don't block
// this thread waiting for the user's response! After the user
// sees the explanation, try again to request the permission.
} else {
// No explanation needed, we can request the permission.
ActivityCompat.requestPermissions(getActivity(),new String[]{Manifest.permission.READ_SMS},REQUEST_SMS);
// REQUEST_SMS is an
// app-defined int constant. …Run Code Online (Sandbox Code Playgroud) android android-package-managers android-permissions packageinstaller android-6.0-marshmallow
(或者是“包名称”?)
\n从一个应用程序切换到另一个应用程序的一种方法是获取该应用程序的启动意图,这可以使用以下命令来完成(给定一些context):
PackageManager manager = context.getPackageManager();\nIntent intent = manager.getLaunchIntentForPackage(packageName);\nRun Code Online (Sandbox Code Playgroud)\n请注意,参数的名称被调用packageName,甚至方法名称也提到了“package”。然而,这不是包名!这是我们应该在这里使用的应用程序 ID!
例如,如果我有一个调试构建类型,而不是com.example具有调试后缀的发布应用程序 ID,例如,它是com.example.debug,我必须使用"com.example.debug"的参数getLaunchIntentForPackage。但应用程序的包命名空间保持不变(默认情况下):它仍然是com.example!如果我没有安装非调试应用程序,该getLaunchIntentForPackage方法将返回null,因为应用程序 IDcom.example尚未安装。
那么我在这里看什么呢?我认为这com.example是我的包名称,com.example.debug也是我的应用程序 ID。但是为什么PackageManager#getLaunchIntentForPackage方法会提到“package”和“package name”,而会认为应该提到“application ID”呢?
这只是 Android SDK 中一个错误命名的方法,还是我误解了什么?
\n我的问题基于以下信息。
\n\n每个 Android 应用程序都有一个唯一的应用程序 ID,看起来像 Java 包名称,例如com.example.myapp。此 ID …
我正在执行以下操作来获取应用程序列表,我只获得已安装的应用程序但不包括所有应用程序,包括系统应用程序.
我尝试过以下方法:
packageList1 = getPackageManager().getInstalledPackages(PackageManager.GET_META_DATA);
Run Code Online (Sandbox Code Playgroud)
还有这个:
packageList1 = getPackageManager().getInstalledPackages(0);
Run Code Online (Sandbox Code Playgroud)
对于这两种情况,我都得到了我在手机上安装的相同应用列表.