标签: android-applicationinfo

有什么方法可以检测我可以/无法访问哪些应用程序的“应用程序信息”屏幕?

背景

您可以使用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)

问题

  1. “主线模块”是什么意思?它是操作系统的一部分,可以自行更新?与Android 10及以上的“项目主线”相关?
  2. 为什么我无法访问其应用程序信息?这不是一个真正的应用程序?但如果没有,它怎么会被列为应用程序列表的一部分?
  3. 有什么方法可以检测已安装的应用程序实际上是一个您无法访问其应用程序信息屏幕的模块吗?操作系统的 UI 如何从其列表中过滤掉这些应用程序?
  4. 是否有更多我无法访问其应用信息屏幕的应用?

android android-applicationinfo package-info

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

如何使用Phonegap for Android调用远程API?

如何使用Phonegap在Android应用程序中进行远程API调用?

android android-applicationinfo cordova

6
推荐指数
2
解决办法
1万
查看次数

是否有可能知道Android应用程序的来源(例如Google Play)?

是否可以通过Android市场(Google Play商店)或其他方式检查应用程序是否已安装?

基本上我想知道的是应用程序是否真实.如果应用程序的安装源是Play Store,那么我们知道名为com.dropbox.android的应用程序是实际的Dropbox应用程序,但如果源不是Play Store,那么任何人都可以创建一个具有相同包名称的Android应用程序并将其安装在设备上.

android android-applicationinfo google-play

6
推荐指数
1
解决办法
518
查看次数

从Application类请求权限

根据新的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

6
推荐指数
1
解决办法
1万
查看次数

Android应用程序名称被截断

我的应用程序名称在某些手机中被截断 是否有任何解决方案可以在所有手机中显示全名?

android android-applicationinfo

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

活动有一个称为getTaskId()的方法。我如何知道此任务ID与应用程序任务堆栈的任务ID是否匹配?

我可以通过进行活动来获取应用程序ID activity.getTaskId()。它将报告回来185。如果我转到另一个应用程序,然后从“共享”按钮开始我的活动,它将被放置在该应用程序堆栈中。如果我这样做activity.getTaskId(),它将192例如报告。我假设一个应用程序进程只能有一个与其关联的主任务堆栈。如何获得该任务ID?我想知道“嘿,我正在您的应用程序任务堆栈之外运行”。

我打算通过在第一次创建我的活动时轮询taskId并将其设置为我的应用程序类的成员变量来进行此操作,但是如果我的应用程序被杀死,然后首先从另一个应用程序启动,它将具有错误的任务ID,如“ AppTaskStackId”。我还没有找到任何API。

android android-activity android-applicationinfo

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

从包管理器中检索应用程序信息

有没有办法从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代码正在使用的 …

android launcher android-applicationinfo

4
推荐指数
1
解决办法
2万
查看次数

如何在列表中获取应用程序的图标?

我正在尝试使用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)); 我该如何解决?

icons android listview imageview android-applicationinfo

3
推荐指数
1
解决办法
7815
查看次数

Android中的ApplicationInfo适配器仅显示具有启动器意图的应用程序

根据标题,我正在寻找一个解决方案,只显示具有启动器意图的应用程序.这是我检索应用列表的代码:

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)

是否可以添加规则以删除没有启动器意图的所有包?谢谢

android android-adapter android-applicationinfo

2
推荐指数
1
解决办法
1372
查看次数

如何在Android Studio中打开Android应用程序中的任何网站

我只是用机器人工作室开始了新机应用..但我需要打开一个网页在我的应用我尝试使用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#android-studio

android web android-activity android-applicationinfo

2
推荐指数
1
解决办法
1742
查看次数

如何获取应用程序的包名称,然后使用Intent启动该应用程序?

我正在开发一款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-applicationinfo

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

如何知道应用程序安装在android中完成?

我想创建这样的服务,当Android设备上安装任何新应用程序时启动.那么如何知道安装在Android设备上的任何应用程序,是否有任何Intent事件被触发?

android android-intent android-service android-applicationinfo

-1
推荐指数
1
解决办法
129
查看次数