In questo caso, una finestra di dialogo selettore/popup personalizzata sarà più adatta a te. Invece di lanciare un intent, usa lo PackageManager
su queryIntentActivities(Intent, int)
. Dalle List<ResolveInfo>
che queryIntentActivities(Intent, int)
rendimenti, filtrare la propria applicazione utilizzando il packageName
:
String packageName = "";
for(ResolveInfo resInfo : resolvedInfoList) {
packageName = resInfo.activityInfo.applicationInfo.packageName;
// Exclude `packageName` from the dialog/popup that you show
}
Edit 1:
Il codice seguente consente di creare e mostrare un PopupWindow
ogni volta showList()
si chiama. Il file di layout XML utilizzato per tornare popupView
contiene altro che un 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>
Questo codice è solo una semplice dimostrazione. Affinché sia tutto utilizzabile, probabilmente sarà necessario aggiungere uno ListView
con un adattatore personalizzato a questo PopupWindow
. Nello OnClickListener
per lo ListView
, si recupererà il nome del pacchetto dell'Applicazione su cui l'utente fa clic e si genererà l'intenzione di avviare quell'attività. A partire da ora, il codice mostra solo come filtrare la tua applicazione utilizzando un selettore personalizzato. Nel blocco if
, sostituire "com.example.my.package.name"
con il nome del pacchetto dell'app.
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);
}
Può essere utile per voi http://stackoverflow.com/questions/8615240/start-an-android-app-intent-from-an-nfc-tag?rq=1 – Aravin
'Ma .. viene sempre torna alla mia app in un ciclo infinito di lanci intenzionali. Cosa intendi esattamente? Si prega di mostrare il codice in cui si crea l'intento e il manifest. – Simon
domanda modificata – ginsunuva