Android 获取手机中安装的所有社交媒体应用程序的列表?
我正在开发一个应用程序,其中列出了移动用户中安装的所有应用程序。我检索了所有应用程序,并将其列在RecyclerView中。现在,我想将社交媒体应用程序从列表中分离出来,用于其他目的。有没有办法将社交媒体应用程序分开? 我正在使用下面的代码从手机中检索所有应用程序包名称Android 获取手机中安装的所有社交媒体应用程序的列表?,android,package-name,Android,Package Name,我正在开发一个应用程序,其中列出了移动用户中安装的所有应用程序。我检索了所有应用程序,并将其列在RecyclerView中。现在,我想将社交媒体应用程序从列表中分离出来,用于其他目的。有没有办法将社交媒体应用程序分开? 我正在使用下面的代码从手机中检索所有应用程序包名称 public List<String> GetAllInstalledApkInfo(){ List<String> ApkPackageName = new ArrayList<>
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作为输入,它在类别中给出了错误。除了这个代码,还有什么我想做的吗?