導航:首頁 > 操作系統 > android獲取安裝列表

android獲取安裝列表

發布時間:2023-04-14 10:03:19

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

閱讀全文

與android獲取安裝列表相關的資料

熱點內容
卡拉解壓視頻大全 瀏覽:923
android手機系統源碼 瀏覽:885
易語言遞歸演算法 瀏覽:284
中國有出什麼加密幣嗎 瀏覽:530
加密程序不小心刪除 瀏覽:415
清除空文件夾的代碼 瀏覽:608
相冊視頻水印怎麼去掉的app 瀏覽:616
雞啄米c編程入門 瀏覽:826
iphone手機視頻如何加密或隱藏 瀏覽:289
車床一個軸的編程 瀏覽:6
任何APP都借不了款怎麼辦 瀏覽:362
linux刷新命令 瀏覽:518
解壓配音的小視頻 瀏覽:652
phptable頁 瀏覽:813
人工智慧怎麼擺脫演算法 瀏覽:72
思科顯示配置命令 瀏覽:411
網上為什麼對程序員這么多評論 瀏覽:84
app續費怎麼算 瀏覽:775
安卓手機怎麼把相冊傳到蘋果 瀏覽:261
高中信息技術演算法教案 瀏覽:245