반응형
Manifest
<application
android:name=".common.RootApp"
android:allowBackup="false"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme.Custom">
<activity android:name=".activities.MainActivity"
android:theme="@style/AppTheme.Custom">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<meta-data
android:name="com.google.android.geo.API_KEY"
android:value="@string/google_map_key" />
<activity android:name=".activities.Maps.MapsActivity"
android:label="@string/google_map_label"
android:description="@string/google_map_description"
android:icon="@drawable/ic_map_black_24dp">
<intent-filter>
<action android:name="android.intent.action.VIEW"/>
<category android:name="com.example.testrxjava.Main.sub.category"/>
</intent-filter>
</activity>
<activity android:name=".activities.shopping.ShoppingActivity"
android:label="@string/shopping_mall_label"
android:description="@string/shopping_mall_description"
android:icon="@drawable/ic_shopping_cart_black_24dp">
<intent-filter>
<action android:name="android.intent.action.VIEW"/>
<category android:name="com.example.testrxjava.Main.sub.category"/>
</intent-filter>
</activity>
</application>
이와같이 manifest가 구성되있다면 intent filter를 이용해 자신이 원하는 activity 그룹을 불러모을수 있습니다.
intent filter를 사용하기위해 만들어진 클래스인 ResolveInfo 를 사용해서 가저와 보겠습니다.
ResolveInfo
Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
intent.addCategory("com.example.testrxjava.Main.sub.category");
PackageManager pm = context.getPackageManager();
List<ResolveInfo> activityList = pm.queryIntentActivities(intent, 0);
예제같은 경우는 category의 이름 값으로 걸러서 가저오고 싶어서 com.example.testrxjava.Main.sub.category라는 임의의 값을 정했습니다.
category에 원하는값을 넣어 해당 카테고리를 가지고있는 액티비티가 있는지 질의를 합니다.
queryIntentActivities는 List<ResolveInfo> 형태로 액티비티 리스트를 돌려줍니다.
Util로 만들기
public static List<AppInfoVO> getActivityList(Context context,Intent filterIntent) throws NullPointerException{
List<AppInfoVO> list = new ArrayList<>();
PackageManager pm = context.getPackageManager();
List<ResolveInfo> activityList = pm.queryIntentActivities(filterIntent, 0);
for (ResolveInfo temp : activityList) {
list.add(
new AppInfoVO(temp.activityInfo.name,
context.getResources().getString(temp.activityInfo.labelRes),
context.getResources().getString(temp.activityInfo.descriptionRes),
temp.activityInfo.icon)
);
}
return list;
}
public static List<AppInfoVO> getActivityList(Context context){
List<AppInfoVO> list = new ArrayList<>();
Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
intent.addCategory("com.example.testrxjava.Main.sub.category");
PackageManager pm = context.getPackageManager();
List<ResolveInfo> activityList = pm.queryIntentActivities(intent, 0);
for (ResolveInfo temp : activityList) {
list.add(
new AppInfoVO(temp.activityInfo.name,
context.getResources().getString(temp.activityInfo.labelRes),
context.getResources().getString(temp.activityInfo.descriptionRes),
temp.activityInfo.icon)
);
}
return list;
}
위를 응용해 util로 따로만들어 어디서든 사용할수있게 수정할 수 있습니다. 자신의 상황에 맞춰 유틸로 만들어줍니다.
public class AppInfoVO {
private String packageName;
private String label;
private String description;
private int icon;
public AppInfoVO(String packageName, String label, String description ,int icon) {
this.packageName = packageName;
this.label = label;
this.description = description;
this.icon = icon;
}
public String getPackageName() {
return packageName;
}
public String getLabel() {
return label;
}
public String getDescription() {
return description;
}
public int getIcon() {
return icon;
}
}
AppInfoVo는 저에게 필요한 액티비티 정보를 가저올수 있도록 vo로 구성해봤습니다.
반응형
'AOS' 카테고리의 다른 글
(android)pinch zoom imageview (0) | 2020.09.03 |
---|---|
(안드로이드)명시적,암시적 인텐트 (0) | 2020.05.03 |
(안드로이드) program type already present:BuildConfig (0) | 2020.04.14 |
(안드로이드)오류 - IllegalBlockSizeException DATA_TOO_LARGE_FOR_KEY_SIZE (0) | 2020.03.11 |
(안드로이드)recycleview 만들기 1편 (기본) (0) | 2020.02.27 |