알림에서 시작하는 인 텐트에 문제가 있습니다 (정확하게는 2 가지 문제가 있음).알림의 인 텐트 선택자
나의 현재 상황은 모두 내가 처음으로 원격 서비스를 시작할 수있는 apk 패밀리가 있다는 것입니다. 이 서비스는 알림을 만들고 클릭하면 서비스를 시작한 응용 프로그램이 다시 열립니다. 이게 괜찮아.
나는 그 가족을 하나 이상의 응용 프로그램이 설치되어있을 때 서비스를 시작한 apk로가는 대신 선택기 인 텐트가 나타나고 사용자가 apk를 선택할 수있게 될 것이라고 생각했습니다. 돌아가다.
나는 이것을 할 수 있었다.
ArrayList<String> myApps = Lists.newArrayList(
"com.myapp1",
"com.myapp2",
"com.myapp3",
"com.myapp4"
);
List<Intent> targetedIntents = new ArrayList<Intent>();
Intent baseIntent = new Intent(Intent.ACTION_MAIN, null);
baseIntent.addCategory("android.intent.category.LAUNCHER");
final PackageManager packageManager = getApplicationContext().getPackageManager();
List<ResolveInfo> list = packageManager.queryIntentActivities(baseIntent, 0);
for (ResolveInfo resolveInfo : list) {
String packageName = resolveInfo.activityInfo.packageName;
if (packageName != null && myApps.contains(packageName)) {
Intent targetedIntent = new Intent();
targetedIntent.setPackage(packageName);
targetedIntent.setClassName(packageName, resolveInfo.activityInfo.name);
targetedIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
targetedIntents.add(targetedIntent);
}
}
Intent intent = Intent.createChooser(new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=whatever")), "Select app to return to");
intent.putExtra(Intent.EXTRA_INITIAL_INTENTS, targetedIntents.toArray(new Parcelable[]{}));
PendingIntent contentIntent = PendingIntent.getActivity(this, 0, intent, intent.getFlags());
notification.setLatestEventInfo(this, notificationTitle, notificationMessage, contentIntent);
이것은 주로 작동해야합니다. 선택기가 나타나고 선택한 옵션이 원하는 apk를 실행합니다.
하지만이 문제가 건너 온 : 나는 나에게 관심에만 의도와 목적 선택기를 만들 때
I.이 선택기는 메시지와 함께 비어
intent = Intent.createChooser(targetedIntents.get(0), "Select app to return to");
intent.putExtra(Intent.EXTRA_INITIAL_INTENTS, targetedIntents.toArray(new Parcelable[]{}));
"어떤 응용 프로그램이 작업을 수행 할 수 없습니다"
하지만 Google Play와 같이 existing apk there first을 입력하면 모든 항목이 작동하고 내 옵션이 Google 재생 옵션과 함께 표시됩니다.
intent = Intent.createChooser(new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=whatever")), "Select app to return to");
intent.putExtra(Intent.EXTRA_INITIAL_INTENTS, targetedIntents.toArray(new Parcelable[]{}));
이것은 내가 살 수있는 것이지만 적절한 apks가 있다면 더 좋을 것입니다.
II. 목록에서 apk를 클릭하면 백그라운드에서 돌아 오는 대신 (apk가 이미 실행중인 경우) 다시 시작됩니다. 적절한 플래그가 설정되어 있습니다.
Intent targetedIntent = new Intent();
targetedIntent.setPackage(packageName);
targetedIntent.setClassName(packageName, resolveInfo.activityInfo.name);
targetedIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
선택기를 사용하기 전에 나는 하나의 의도 만 실행하고 정상적으로 백그라운드 APK를 다시 시작했습니다.
intent = new Intent(this, MainActivity.class);
intent.setAction("android.intent.action.MAIN");
intent.addCategory("android.intent.category.LAUNCHER");
apk가 다시 시작될 때 내가 무엇을 잘못하고 있는지 확실하지 않습니다.
두 번째 문제에 대한 두 번째 해결 방법은 정상적으로 작동합니다. 나는 chooser에 대한 내 자신의 대화 상자를 만드는 것에 대한 질문을 가지고있다. (나는 그것이 유일한 resonable 한 해결책이라고 생각했다.) 선택자가 계류중인 사람으로부터 시작 되었기 때문에 어떻게 할 것인가? (아무데도 대화를 시작할 수 없습니다.) – darkhie
알림에서 대화 상자처럼 보이는 활동을 시작할 수 있습니다. StackOverflow를 검색하면 예제를 찾을 수 있습니다. –