Android 获取手机中安装的所有社交媒体应用程序的列表?

Android 获取手机中安装的所有社交媒体应用程序的列表?,android,package-name,Android,Package Name,我正在开发一个应用程序,其中列出了移动用户中安装的所有应用程序。我检索了所有应用程序,并将其列在RecyclerView中。现在,我想将社交媒体应用程序从列表中分离出来,用于其他目的。有没有办法将社交媒体应用程序分开? 我正在使用下面的代码从手机中检索所有应用程序包名称 public List<String> GetAllInstalledApkInfo(){ List<String> ApkPackageName = new ArrayList<>

我正在开发一个应用程序,其中列出了移动用户中安装的所有应用程序。我检索了所有应用程序,并将其列在RecyclerView中。现在,我想将社交媒体应用程序从列表中分离出来,用于其他目的。有没有办法将社交媒体应用程序分开? 我正在使用下面的代码从手机中检索所有应用程序包名称

public List<String> GetAllInstalledApkInfo(){

    List<String> ApkPackageName = new ArrayList<>();

    Intent intent = new Intent(Intent.ACTION_MAIN,null);

    intent.addCategory(Intent.CATEGORY_LAUNCHER);

    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED );

    List<ResolveInfo> resolveInfoList = context1.getPackageManager().queryIntentActivities(intent,0);

    for(ResolveInfo resolveInfo : resolveInfoList){

        ActivityInfo activityInfo = resolveInfo.activityInfo;

        ApkPackageName.add(activityInfo.applicationInfo.packageName);
    }

    return ApkPackageName;

}
public List GetAllInstalledApkInfo(){
List ApkPackageName=new ArrayList();
意图=新意图(Intent.ACTION\u MAIN,空);
intent.addCategory(intent.CATEGORY_启动器);
intent.setFlags(intent.FLAG_ACTIVITY_NEW_TASK | intent.FLAG_ACTIVITY_RESET_TASK_,如果需要);
List resolveInfoList=context1.getPackageManager().QueryInputActivities(intent,0);
for(ResolveInfo ResolveInfo:resolveInfoList){
ActivityInfo ActivityInfo=resolveInfo.ActivityInfo;
ApkPackageName.add(activityInfo.applicationInfo.packageName);
}
返回ApkPackageName;
}

如果您获得每个应用程序的软件包名称,您可以直接请求play store应用程序属于哪个类别,并使用此库解析html响应页面:

这里有一个片段可以解决您的问题:

public class MainActivity extends AppCompatActivity {

public final static String GOOGLE_URL = "https://play.google.com/store/apps/details?id=";
public static final String ERROR = "error";

...


   private class FetchCategoryTask extends AsyncTask<Void, Void, Void> {

       private final String TAG = FetchCategoryTask.class.getSimpleName();
       private PackageManager pm;
       private ActivityUtil mActivityUtil;

       @Override
       protected Void doInBackground(Void... errors) {
          String category;
           pm = getPackageManager();
           List<ApplicationInfo> packages = pm.getInstalledApplications(PackageManager.GET_META_DATA);
           Iterator<ApplicationInfo> iterator = packages.iterator();
           while (iterator.hasNext()) {
               ApplicationInfo packageInfo = iterator.next();
               String query_url = GOOGLE_URL + packageInfo.packageName;
               Log.i(TAG, query_url);
               category = getCategory(query_url);
               // store category or do something else
           }
           return null;
        }


        private String getCategory(String query_url) {
           boolean network = mActivityUtil.isNetworkAvailable();
           if (!network) {
               //manage connectivity lost
               return ERROR;
           } else {
               try {
                   Document doc = Jsoup.connect(query_url).get();
                   Element link = doc.select("span[itemprop=genre]").first();
                   return link.text();
               } catch (Exception e) {
                   return ERROR;
               }
           }
        }
    }  
}
public类MainActivity扩展了AppCompatActivity{
公共最终静态字符串GOOGLE_URL=”https://play.google.com/store/apps/details?id=";
公共静态最终字符串ERROR=“ERROR”;
...
私有类FetchCategoryTask扩展了AsyncTask{
private final String TAG=FetchCategoryTask.class.getSimpleName();
私人包装经理;
私人活动util mActivityUtil;
@凌驾
受保护的Void doInBackground(Void…错误){
字符串类别;
pm=getPackageManager();
List packages=pm.getinstalledApplication(PackageManager.GET_元数据);
迭代器迭代器=packages.Iterator();
while(iterator.hasNext()){
ApplicationInfo-packageInfo=iterator.next();
String query_url=GOOGLE_url+packageInfo.packageName;
Log.i(标签、查询url);
category=getCategory(查询url);
//存储类别或执行其他操作
}
返回null;
}
私有字符串getCategory(字符串查询\u url){
布尔网络=mActivityUtil.isNetworkAvailable();
如果(!网络){
//管理丢失的连接
返回误差;
}否则{
试一试{
Document doc=Jsoup.connect(query_url.get();
Element link=doc.select(“span[itemprop=genre]”。first();
返回link.text();
}捕获(例外e){
返回误差;
}
}
}
}  
}

如果您获得每个应用程序的软件包名称,您可以直接请求play store应用程序属于哪个类别,并使用此库解析html响应页面:

这里有一个片段可以解决您的问题:

public class MainActivity extends AppCompatActivity {

public final static String GOOGLE_URL = "https://play.google.com/store/apps/details?id=";
public static final String ERROR = "error";

...


   private class FetchCategoryTask extends AsyncTask<Void, Void, Void> {

       private final String TAG = FetchCategoryTask.class.getSimpleName();
       private PackageManager pm;
       private ActivityUtil mActivityUtil;

       @Override
       protected Void doInBackground(Void... errors) {
          String category;
           pm = getPackageManager();
           List<ApplicationInfo> packages = pm.getInstalledApplications(PackageManager.GET_META_DATA);
           Iterator<ApplicationInfo> iterator = packages.iterator();
           while (iterator.hasNext()) {
               ApplicationInfo packageInfo = iterator.next();
               String query_url = GOOGLE_URL + packageInfo.packageName;
               Log.i(TAG, query_url);
               category = getCategory(query_url);
               // store category or do something else
           }
           return null;
        }


        private String getCategory(String query_url) {
           boolean network = mActivityUtil.isNetworkAvailable();
           if (!network) {
               //manage connectivity lost
               return ERROR;
           } else {
               try {
                   Document doc = Jsoup.connect(query_url).get();
                   Element link = doc.select("span[itemprop=genre]").first();
                   return link.text();
               } catch (Exception e) {
                   return ERROR;
               }
           }
        }
    }  
}
public类MainActivity扩展了AppCompatActivity{
公共最终静态字符串GOOGLE_URL=”https://play.google.com/store/apps/details?id=";
公共静态最终字符串ERROR=“ERROR”;
...
私有类FetchCategoryTask扩展了AsyncTask{
private final String TAG=FetchCategoryTask.class.getSimpleName();
私人包装经理;
私人活动util mActivityUtil;
@凌驾
受保护的Void doInBackground(Void…错误){
字符串类别;
pm=getPackageManager();
List packages=pm.getinstalledApplication(PackageManager.GET_元数据);
迭代器迭代器=packages.Iterator();
while(iterator.hasNext()){
ApplicationInfo-packageInfo=iterator.next();
String query_url=GOOGLE_url+packageInfo.packageName;
Log.i(标签、查询url);
category=getCategory(查询url);
//存储类别或执行其他操作
}
返回null;
}
私有字符串getCategory(字符串查询\u url){
布尔网络=mActivityUtil.isNetworkAvailable();
如果(!网络){
//管理丢失的连接
返回误差;
}否则{
试一试{
Document doc=Jsoup.connect(query_url.get();
Element link=doc.select(“span[itemprop=genre]”。first();
返回link.text();
}捕获(例外e){
返回误差;
}
}
}
}  
}

它总是返回错误。我刚刚通过Facebook play store URL作为输入,它在类别中给出了错误。除了这段代码,还有什么我想做的吗?它总是返回错误。我刚刚通过Facebook play store URL作为输入,它在类别中给出了错误。除了这个代码,还有什么我想做的吗?