您可以使用PackageManager.getInstalledPackages获取已安装应用程序的列表。
而且,您可以通过以下方式访问每个应用程序的应用程序信息屏幕:
val intent = Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS, Uri.parse("package:$appPackageName"))
startActivity(intent)
Run Code Online (Sandbox Code Playgroud)
例子:
事情是,我注意到(在有人告诉我之后)对于某些应用程序,您无法访问他们的应用程序信息屏幕。这些应用程序的此类包名示例:“com.google.android.ext.services”(“Android 服务库”)、“com.google.mainline.tememetry”(“支持组件”)、com.google.android .modulemetadata”(主要组件)。也许更多。
向谷歌报告后,我被告知:
com.google.android.ext.services 是主线模块,因此设置不提供详细的应用程序信息。
我试图查看 PackageInfo 和 ApplicationInfo 的各个领域和功能。
我找到了“isApex”,但它似乎总是错误的,并且文档根本无法帮助理解它是什么(“包是否是 APEX 包”)。编辑:如果我检查 API 30,它总是假的。在 API 29 上,它实际上有时设置为真。报到这里。
我还发现了一个名为 "coreApp" 的私有布尔字段(我可以通过反射访问),确实有时它是正确的,但并不总是如此,当它为真时,这意味着我无法访问它的应用程序信息屏幕。
这是获取它的代码:
fun isProbablyCoreApp(packageInfo: PackageInfo): Boolean {
return try {
val field = PackageInfo::class.java.getField("coreApp")
field.getBoolean(packageInfo)
} catch (e: Throwable) {
false
}
}
Run Code Online (Sandbox Code Playgroud)
如何使用Phonegap在Android应用程序中进行远程API调用?
是否可以通过Android市场(Google Play商店)或其他方式检查应用程序是否已安装?
基本上我想知道的是应用程序是否真实.如果应用程序的安装源是Play Store,那么我们知道名为com.dropbox.android的应用程序是实际的Dropbox应用程序,但如果源不是Play Store,那么任何人都可以创建一个具有相同包名称的Android应用程序并将其安装在设备上.
根据新的Android文档,为了收集某些数据,我需要请求许可.所以我这样做:
@Override
public void onCreate() {
super.onCreate();
...
...
if (PermissionUtility.isPermitted(applicationContext, android.Manifest.permission.READ_SMS)) {
userNumber = getUserPhoneNumber();
} else {
ActivityCompat.requestPermissions(activity,
new String[]{android.Manifest.permission.READ_SMS},
Constants.REQUEST_CODE_READ_SMS);
}
...
...
}
Run Code Online (Sandbox Code Playgroud)
问题是我M在我的类,这是做public class MyApplication extends Application{...}这样activity是不是可以在这里找到.有没有办法在这个课程中要求权限或通过某种方式传递活动?
android android-activity android-applicationinfo android-permissions
我的应用程序名称在某些手机中被截断 是否有任何解决方案可以在所有手机中显示全名?
我可以通过进行活动来获取应用程序ID activity.getTaskId()。它将报告回来185。如果我转到另一个应用程序,然后从“共享”按钮开始我的活动,它将被放置在该应用程序堆栈中。如果我这样做activity.getTaskId(),它将192例如报告。我假设一个应用程序进程只能有一个与其关联的主任务堆栈。如何获得该任务ID?我想知道“嘿,我正在您的应用程序任务堆栈之外运行”。
我打算通过在第一次创建我的活动时轮询taskId并将其设置为我的应用程序类的成员变量来进行此操作,但是如果我的应用程序被杀死,然后首先从另一个应用程序启动,它将具有错误的任务ID,如“ AppTaskStackId”。我还没有找到任何API。
有没有办法从PackageManager中提取ApplicationInfo对象?我已经尝试了许多不同类型的方法来实现这一点,但无济于事.我目前正在使用默认的android启动器屏幕(应用程序抽屉),并希望从包名称中获取包信息.这不是在应用程序层,而是在Launcher2应用程序的构建层,源.我正在使用的android版本是2.3.3.
这是我尝试过的:
ApplicationInfo item = pack.getApplicationInfo(package_list.get(i), PackageManager.GET_ACTIVITIES);
Run Code Online (Sandbox Code Playgroud)
错误:
Type mismatch: cannot convert from android.content.pm.ApplicationInfo to com.android.launcher2.ApplicationInfo
Run Code Online (Sandbox Code Playgroud)
这不是用于检索当前正在运行的程序包,而是用于检索手机本身上的所有应用程序.
我找到:
pack.getApplicationInfo(packageName, flags)
Run Code Online (Sandbox Code Playgroud)
不会返回与传递给AllApps2D.java中的以下函数的ApplicationInfo相同的ApplicationInfo对象:
public void addApps(ArrayList<ApplicationInfo> list)
Run Code Online (Sandbox Code Playgroud)
我试图从包本身拉出ApplicationInfo对象只有名称.
有问题的函数如下所示,如AllApps2D.java(Launcher2文件夹)的开源代码中所示.
private ArrayList<ApplicationInfo> mAllAppsList = new ArrayList<ApplicationInfo>();
public void addApps(ArrayList<ApplicationInfo> list) {
final int N = list.size();
for (int i=0; i<N; i++) {
final ApplicationInfo item = list.get(i);
int index = Collections.binarySearch(mAllAppsList, item,
LauncherModel.APP_NAME_COMPARATOR);
if (index < 0) {
index = -(index+1);
}
mAllAppsList.add(index, item);
}
mAppsAdapter.notifyDataSetChanged();
}
Run Code Online (Sandbox Code Playgroud)
UPDATE
基本上我要做的是用自定义顺序重新排列启动器中图标的排列.如果我可以通过PackageManager检索所需的信息,那将是理想的选择.
为了实现我的工作,我必须能够提取 AllApps2D代码正在使用的 …
我正在尝试使用chechboxes为Android手机上的已安装应用程序制作列表视图.我将图标放在ArrayList中,如下所示
packs = new ArrayList<String>(); // a list of all the packages
names = new ArrayList<String>(); // a list of all the apps names
icons = new ArrayList<Drawable>(); // a list of all apps drawable images
List<ApplicationInfo> packages = packageManager.getInstalledApplications(PackageManager.GET_META_DATA);
for (ApplicationInfo packageInfo : packages) {
if ((packageInfo.flags & ApplicationInfo.FLAG_SYSTEM) !=1){ // 'if' is to remove all system applications
packs.add((String) packageInfo.packageName);
names.add((String) packageManager.getApplicationLabel(packageInfo));
icons.add((Drawable) packageManager.getApplicationIcon(packageInfo));
Run Code Online (Sandbox Code Playgroud)
然后把它放在listview上,我用它.
icon = (ImageView) row.findViewById(R.id.appIcon);
icon.setImageDrawable(icons.get(position));
Run Code Online (Sandbox Code Playgroud)
但是,它强制关闭,问题出在icon.setImageDrawable(icons.get(position)); 我该如何解决?
根据标题,我正在寻找一个解决方案,只显示具有启动器意图的应用程序.这是我检索应用列表的代码:
public static List<ApplicationInfo> getInstalledApplication(Context context) {
PackageManager packageManager = context.getPackageManager();
List<ApplicationInfo> apps = packageManager.getInstalledApplications(0);
Collections.sort(apps, new ApplicationInfo.DisplayNameComparator(packageManager));
return apps;
}
Run Code Online (Sandbox Code Playgroud)
是否可以添加规则以删除没有启动器意图的所有包?谢谢
我只是用机器人工作室开始了新机应用..但我需要打开一个网页在我的应用我尝试使用Web视图但它不工作了......当我打开我的应用程序崩溃下来
<WebView
android:id="@+id/web_view"
android:layout_width="fill_parent"
android:layout_height="fill_parent" />
Run Code Online (Sandbox Code Playgroud)
我包含在java类文件中
private WebView wb;
@Override
protected void onCreate(Bundle savedInstanceState) {
wb=(WebView)findViewById(R.id.web_view);
WebSettings webSettings=wb.getSettings();
webSettings.setJavaScriptEnabled(true);
wb.loadUrl("https://www.google.co.in");
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_references);
}
Run Code Online (Sandbox Code Playgroud)
在包含的清单xml文件中
<uses-permission android:name="android.permission.INTERNET"/>
Run Code Online (Sandbox Code Playgroud)
但仍然我的应用程序崩溃pllzz帮助我
我正在开发一款Android应用.在该应用程序中,有一个按钮可以转到另一个活动,其中包含手机上已安装应用程序的列表.当用户选择应用程序时,将保存其包名称,并且用户将返回上一个活动.但是,我怎样才能获得包名?
public class LoaderCustomSupport extends SherlockFragmentActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
FragmentManager fm = getSupportFragmentManager();
// Create the list fragment and add it as our sole content.
if (fm.findFragmentById(android.R.id.content) == null) {
AppListFragment list = new AppListFragment();
fm.beginTransaction().add(android.R.id.content, list).commit();
}
}
/**
* This class holds the per-item data in our Loader.
*/
public static class AppEntry {
public AppEntry(AppListLoader loader, ApplicationInfo info) {
mLoader = loader;
mInfo = info;
mApkFile = new File(info.sourceDir);
}
public ApplicationInfo …Run Code Online (Sandbox Code Playgroud) 我想创建这样的服务,当Android设备上安装任何新应用程序时启动.那么如何知道安装在Android设备上的任何应用程序,是否有任何Intent事件被触发?
android android-intent android-service android-applicationinfo
android ×12
cordova ×1
google-play ×1
icons ×1
imageview ×1
launcher ×1
listview ×1
package-info ×1
web ×1