Niestandardowe okno dialogowe wyboru/popup będzie dla Ciebie lepsze w tym przypadku. Zamiast uruchamiać zamiar, użyj PackageManager
do queryIntentActivities(Intent, int)
. Z List<ResolveInfo>
że queryIntentActivities(Intent, int)
zwrotów, odfiltrować swoją aplikację za pomocą packageName
:
String packageName = "";
for(ResolveInfo resInfo : resolvedInfoList) {
packageName = resInfo.activityInfo.applicationInfo.packageName;
// Exclude `packageName` from the dialog/popup that you show
}
Edycja 1:
Poniższy kod będzie tworzyć i pokazać PopupWindow
ilekroć showList()
nazywa. Plik xml układ stosowany do powrotu popupView
zawiera nic poza LinearLayout
(R.layout.some_popup_view):
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/llPopup"
android:orientation="vertical" >
</LinearLayout>
Ten kod jest tylko prosta demonstracja. Aby było to prawie możliwe do użycia, prawdopodobnie będziesz musiał dodać ListView
z niestandardowym adapterem do tego PopupWindow
. W wersji OnClickListener
dla ListView
zostanie pobrana nazwa pakietu aplikacji, którą użytkownik kliknie, i wygenerowana zostanie intencja rozpoczęcia tej czynności. W tej chwili kod wyświetla tylko jak odfiltrować własną aplikację za pomocą niestandardowego wyboru. W bloku if
zastąp nazwę "com.example.my.package.name"
nazwą pakietu aplikacji.
public void showList() {
View popupView = getLayoutInflater().inflate(R.layout.some_popup_view, null);
PopupWindow popupWindow = new PopupWindow(popupView, LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
LinearLayout llPopup = (LinearLayout) popupView.findViewById(R.id.llPopup);
PackageManager pm = getPackageManager();
Intent intent = new Intent();
// In my case, NfcAdapter.ACTION_NDEF_DISCOVERED was not returning anything
//intent.setAction(NfcAdapter.ACTION_NDEF_DISCOVERED);
intent.setAction(NfcAdapter.ACTION_TECH_DISCOVERED);
List<ResolveInfo> resolvedInfoList = pm.queryIntentActivities(intent, 0);
String packageName = "";
for(ResolveInfo resInfo : resolvedInfoList) {
packageName = resInfo.activityInfo.applicationInfo.packageName;
// Exclude `packageName` from the dialog/popup that you show
if (!packageName.equals("com.example.my.package.name")) {
TextView tv = new TextView(this);
tv.setText(packageName);
llPopup.addView(tv);
}
}
popupWindow.showAtLocation(popupView, Gravity.CENTER, 0, 0);
}
Może być pomocne dla Ciebie http://stackoverflow.com/questions/8615240/start-an-android-app-intent-from-an-nfc-tag?rq=1 – Aravin
'Ale ... zawsze przychodzi z powrotem do mojej aplikacji w nieskończonej pętli intencji rzucania "Co dokładnie masz na myśli? Pokaż kod, w którym tworzysz intencję i manifest. – Simon
edytowane pytanie – ginsunuva