❶ android 读取已安装应用列表需要申请权限吗
这里我先公布下答案:不需要
我要实现读取已安装应用列表功能,Google了一下,可以通过PackageManager.getInstalledPackages()方法获取,我手头有三台手机,分别是华为Nexus 5X、Meta9、Vivo X20,写了个Demo在这三个手机上进行测试,测试结果如下:
我没有申请任何权限,Vivo X20为什么会出现申请读取已安装应用列表权限对话框呢?为什么是有时候能获取到全部已安装应用列表,有时候获取不到?
Google一下,看有没有和我类似的问题,找到了一篇:
Android 如何完整的获取到用户已安装应用列表
这篇文章中,作者有个结论:‘国内部分厂商比如华为、oppo,他们将”获取用户已安装应用列表”的权限暴露给了用户,让用户可以自由决定允许或者禁止应用访问该信息。’
Nexus 5X中没有找到读取已安装应用列表权限。
这里有提到华为,我打开meta 9的权限列表看了一下有读取已安装应用列表权限,我的Demo对应的这个权限默认是打开的,所以meta 9是能获取到全部已安装应用列表。
再看下Vivo X20,在打开Demo的时候弹出申请权限对话框了,说明Vivo也属于那部分国内厂商,由于在弹出申请读取已安装应用列表权限对话框时,我允许了,所以打开Vivo X20的读取已安装应用列表权限时,这里的状态是打开的,但是,点进去一看,暗藏玄机,这里还有一个 安全等级,分为高、中、低 ,我的Demo属于高,看看其他应用呢?微信安全等级属于低、支付宝属于低,读取不到应用列表难道和这个 安全等级 有关系吗?
我手动将我的Demo的 安全等级 调整为低,再打开Demo,奇迹发生了,没有弹出申请读取已安装应用列表权限对话框,并且获取到了全部已安装应用列表。
Android 读取已安装应用列表不需要申请权限,因为Android权限列表中没有权限是用于读取已安装应用列表的。
如果想要获取Vivo X20这种有 安全等级 的手机中的已安装应用列表,由于这种 安全等级 我们无法决定,所以只能通过反向查找的方式,即通过包名能否找到应用,从而判断是否安装了某应用。
这种方法获取不到全部已安装应用列表,只能获取到指定的应用。
如果有比较了解权限的同学觉得我有写的不对的地方,或者对于获取已安装应用列表有更好的方法,欢迎留言交流!
❷ 为什么安卓的APP都要读取手机中已安装的应用列表
你说的应该是少数的毒春李态瘤全家桶应用吧。
比如网络,你装个网络贴吧,他会主动的为你读取你手机是否有网络输入法,网络,网络知道,网络地图什么的,这样检测到,会运行他们的唤醒扰胡机制,所读取的软件就会后台运行。
这样会给他们每年评比软件运行时长的纪录上加了一大比。
还有一种情况,比如你下载了一个网易云音乐,他会主动读取你的手机号,是否安装微信,微博,支付宝,QQ这些软件,因为他们会有这些登录方式,供用户自己选择。这样也是为了方便。
最后一种情况扒源就是用户信息检测反馈报告,就是网络阿里里面干的事,毒瘤。
❸ android获取应用安装之后的路径
Log.d(TAG," this.getFilesDir().getParent()"+this.getFilesDir().getParent());
this.getFilesDir().getParent()/data/user/0/com.xxx.xxx
com.xxx.xxx为该应用的包名
以后就不用另行去判断是真机还是模拟器的安装之后文件的路径了
该方法直接返回安装之后包所在的路径
手机无法直接查看应用安装之后 应用宝所在的具体路径的 可以root之后 或者开发工具Android Studio点击Device File Explorer等方法查看
❹ Android该怎样获取系统上安装的APP信息
publicclass AppInfo {
public String appName="袜腔";
public String packageName="";
public String versionName="";
publicint versionCode=0;
public Drawable appIcon=null;
publicvoid print()
{
Log.v("app","Name:"+appName+" Package:"+packageName);
Log.v("app","Name:"+appName+" versionName:"+versionName);
Log.v("app","Name:"+appName+" versionCode:"+versionCode);
}
}
ArrayList<AppInfo> appList = new ArrayList<AppInfo>(); //用来存储获取的应用信息数据
List<PackageInfo> packages = getPackageManager().getInstalledPackages(0);
for(int i=0;i<packages.size();i++) {
PackageInfo packageInfo = packages.get(i);
AppInfo tmpInfo =new AppInfo();
tmpInfo.appName = packageInfo.applicationInfo.loadLabel(getPackageManager()).toString();
tmpInfo.packageName = packageInfo.packageName;
tmpInfo.versionName = packageInfo.versionName;
tmpInfo.versionCode = packageInfo.versionCode;
tmpInfo.appIcon = packageInfo.applicationInfo.loadIcon(getPackageManager());
appList.add(tmpInfo);
}
// 这下手机上安消搏装的应用数据都存在告桥衫appList里了。
❺ android获取安装程序的详细权限列表
PackageManager packManager = this.getPackageManager();
List<ApplicationInfo> infos = packManager.getInstalledApplications(PackageManager.GET_ACTIVITIES);
//获取到安装的App列表
Log.i("app", infos.size()+"");
for(ApplicationInfo info: infos){
Log.i("app", "appName--->"+packManager.getApplicationLabel(info)+"");
try {
PackageInfo packInfo = packManager.getPackageInfo(info.packageName, PackageManager.GET_PERMISSIONS);
String permissons [] = packInfo.requestedPermissions;
//获取该app的所有权限
int length = permissons.length;
for(int i = 0 ;i < length ;i ++){
Log.i("app",permissons[i]);
}
} catch (Exception e) {
// TODO Auto-generated catch block
// e.printStackTrace();
}
}
以上是获取系统安装程序列表和对应的权限的方法,知道这些就可以做出来了
❻ 如何获得Android手机的软件安装列表
packageManager.getInstalledApplications()返回一个列表都是安装在设备上的应用程序包。如果我们把 flag GET_UNINSTALLED_PACKAGES设定,一个列表中的所有应用,包括那些设置为dont_delete_data(部分已安装的应戚让州用程序的数据目录)将返回。
你可以看到高蔽附件中的截图,我们将创建一个列表显示所有已安装的应用程序。
snippet_list_row.xml--------------------这个布局是由ListView适配器用于表示应用程序的细节。它显示应用程序图标、应用程序名称和应用程序包。
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" > <ImageView android:id="@+id/app_icon" android:layout_width="50dp" android:layout_height="50dp" android:padding="3dp" android:scaleType="滑告centerCrop" /> <LinearLayout android:layout_width="fill_parent" android:layout_height="fill_parent" android:gravity="center_vertical" android:orientation="vertical" android:paddingLeft="5dp" > <TextView android:id="@+id/app_name" android:layout_width="fill_parent" android:layout_height="wrap_content" android:gravity="center_vertical" android:textStyle="bold" /> <TextView android:id="@+id/app_paackage" android:layout_width="fill_parent" android:layout_height="wrap_content" android:gravity="center_vertical" /> </LinearLayout></LinearLayout>
AllAppsActivity.java ##这是用于初始化和列表已安装的应用程序的主要应用程序类。从packagemanage得到应用细节列表是一个耗时的任务,我们将在AsyncTask里面做。同时,类使用自定义适配器“自定义listview applicationadapter”。 package com.javatechig.listapps;import java.util.ArrayList;import java.util.List;import android.app.AlertDialog;import android.app.ListActivity;import android.app.ProgressDialog;import android.content.ActivityNotFoundException;import android.content.DialogInterface;import android.content.Intent;import android.content.pm.ApplicationInfo;import android.content.pm.PackageManager;import android.net.Uri;import android.os.AsyncTask;import android.os.Bundle;import android.view.Menu;import android.view.MenuInflater;import android.view.MenuItem;import android.view.View;import android.widget.ListView;import android.widget.Toast;public class AllAppsActivity extends ListActivity { private PackageManager packageManager = null; private List<ApplicationInfo> applist = null; private ApplicationAdapter listadaptor = null; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); packageManager = getPackageManager(); new LoadApplications().execute(); } public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.menu, menu); return true; } public boolean onOptionsItemSelected(MenuItem item) { boolean result = true; switch (item.getItemId()) { case R.id.menu_about: { displayAboutDialog(); break; } default: { result = super.onOptionsItemSelected(item); break; } } return result; } private void displayAboutDialog() { final AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setTitle(getString(R.string.about_title)); builder.setMessage(getString(R.string.about_desc)); builder.setPositiveButton("Know More", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://stacktips.com")); startActivity(browserIntent); dialog.cancel(); } }); builder.setNegativeButton("No Thanks!", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { dialog.cancel(); } }); builder.show(); } @Override protected void onListItemClick(ListView l, View v, int position, long id) { super.onListItemClick(l, v, position, id); ApplicationInfo app = applist.get(position); try { Intent intent = packageManager .getLaunchIntentForPackage(app.packageName); if (null != intent) { startActivity(intent); } } catch (ActivityNotFoundException e) { Toast.makeText(AllAppsActivity.this, e.getMessage(), Toast.LENGTH_LONG).show(); } catch (Exception e) { Toast.makeText(AllAppsActivity.this, e.getMessage(), Toast.LENGTH_LONG).show(); } } private List<ApplicationInfo> checkForLaunchIntent(List<ApplicationInfo> list) { ArrayList<ApplicationInfo> applist = new ArrayList<ApplicationInfo>(); for (ApplicationInfo info : list) { try { if (null != packageManager.getLaunchIntentForPackage(info.packageName)) { applist.add(info); } } catch (Exception e) { e.printStackTrace(); } } return applist; } private class LoadApplications extends AsyncTask<Void, Void, Void> { private ProgressDialog progress = null; @Override protected Void doInBackground(Void... params) { applist = checkForLaunchIntent(packageManager.getInstalledApplications(PackageManager.GET_META_DATA)); listadaptor = new ApplicationAdapter(AllAppsActivity.this, R.layout.snippet_list_row, applist); return null; } @Override protected void onCancelled() { super.onCancelled(); } @Override protected void onPostExecute(Void result) { setListAdapter(listadaptor); progress.dismiss(); super.onPostExecute(result); } @Override protected void onPreExecute() { progress = ProgressDialog.show(AllAppsActivity.this, null, "Loading application info..."); super.onPreExecute(); } @Override protected void onProgressUpdate(Void... values) { super.onProgressUpdate(values); } }}
package com.javatechig.listapps;import java.util.List;import android.content.Context;import android.content.pm.ApplicationInfo;import android.content.pm.PackageManager;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.ArrayAdapter;import android.widget.ImageView;import android.widget.TextView;public class ApplicationAdapter extends ArrayAdapter<ApplicationInfo> { private List<ApplicationInfo> appsList = null; private Context context; private PackageManager packageManager; public ApplicationAdapter(Context context, int textViewResourceId, List<ApplicationInfo> appsList) { super(context, textViewResourceId, appsList); this.context = context; this.appsList = appsList; packageManager = context.getPackageManager(); } @Override public int getCount() { return ((null != appsList) ? appsList.size() : 0); } @Override public ApplicationInfo getItem(int position) { return ((null != appsList) ? appsList.get(position) : null); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { View view = convertView; if (null == view) { LayoutInflater layoutInflater = (LayoutInflater) context .getSystemService(Context.LAYOUT_INFLATER_SERVICE); view = layoutInflater.inflate(R.layout.snippet_list_row, null); } ApplicationInfo applicationInfo = appsList.get(position); if (null != applicationInfo) { TextView appName = (TextView) view.findViewById(R.id.app_name); TextView packageName = (TextView) view.findViewById(R.id.app_paackage); ImageView iconview = (ImageView) view.findViewById(R.id.app_icon); appName.setText(applicationInfo.loadLabel(packageManager)); packageName.setText(applicationInfo.packageName); iconview.setImageDrawable(applicationInfo.loadIcon(packageManager)); } return view; }};
❼ 如何查看android 已安装的apk目录
1.浏览所有已安装应用(APK)
点击 设置>>应用>>在应用最下面选择 已安装应用 即可看到所有已安装的APK。
2.浏览所有APK
选择 文件管理>>分类浏览>>安装包
❽ Android-读取已安装应用列表
title: Android-读取已慧源安装应唯毕用指碧芹列表
date: 2019-12-02 11:54:53
categories:
- Android
tags:
- App
https://www.jianshu.com/p/dee8bc1fb847
https://blog.csdn.net/q384415054/article/details/72972405
https://blog.csdn.net/u012888262/article/details/71248898