0

Ich habe eine ArrayList von Intents, wie kann ich überprüfen, ob die Absicht an einer bestimmten Position eine Aktivität, einen Dienst oder nichts enthält?Prüfe ob eine Absicht eine Aktivität oder ein Dienst ist oder keine

Intent intent = intents.get(id); 
context.startActivityForResult(intent,1); 

Wie würden Sie prüfen, ob die Absicht bei Index-ID einmal richtig durch startActivityForResult weitergegeben werden kann, die einen Schwerpunkt auf Aktivitätsklassen haben.

Antwort

2

Nun, es ist nicht eine elegante Lösung, aber man kann versuchen, Klassennamen Absicht wie folgt zu erhalten:

Intent it = new Intent(ctx, AnotherActivity.class); 
it.getComponent().getClassName() // output com.package.app.MainActivity 

Intent it = new Intent(ctx, JustService.class); 
it.getComponent().getClassName() // output com.package.app.JustService 

und

switch (...getClassName()) { 
    case 'com.package.app.JustService' { 
     //todo 
    } 
} 

Sie können getShortClassName() Methode verwendet werden und es wird ausgegeben Klassenname ohne Standardpaket:

Für leere Absicht würde ich überprüfen, ob null ist.

+0

Für nicht Aktivitäten und Dienste habe ich mich entschieden zu überprüfen, ob Component null war – CQM

1

Wie kann ich überprüfen, ob die Absicht an einer bestimmten Position eine Aktivität, einen Dienst oder nichts enthält?

Ich werde dies als "wie kann ich sehen, welche Komponente (n) Intent könnte zu lösen?".

Wenn ja, verwenden Sie PackageManager und queryIntentActivities(), queryIntentServices() und queryBroadcastReceivers(). Beachten Sie, dass ein Intent für keines, alle oder alle von denen verwendbar sein kann.

Wie würden Sie prüfen, ob die Absicht bei Index-ID einmal richtig durch startActivityForResult weitergegeben werden kann

Sie dies nicht tun, kurz, um die Entwickler zu finden, der die Aktivität schrieb und bittet sie, „hey, werden Das gibt ein Ergebnis zurück? " Sie könnten bekannte, result-receiving Aktionszeichenfolgen auf die weiße Liste setzen (z. B. ACTION_PICK, ACTION_GET_CONTENT, ACTION_OPEN_DOCUMENT), aber Sie haben keine Möglichkeit zu wissen, ob eine willkürliche Aktivität ein Ergebnis für eine gegebene Intent zurückgibt.

+0

Für nicht Aktivitäten und Dienste entschied ich zu überprüfen, ob Component null war – CQM

+0

@CQM: Ich weiß nicht, woher deine 'Intents' kommen, aber eine' Intent' muss nicht einen 'ComponentName' haben gültig sein. 'new Intent (Intent.ACTION_VIEW) .setDataAndType (...)' hat keinen 'ComponentName', kann aber dennoch in eine Aktivität aufgelöst werden. – CommonsWare

+0

Danke, das war sehr aufschlussreich. Ich werde es im Gedächtnis behalten, wenn mein Anwendungsfall erweitert wird und Störungen eingeführt werden. – CQM

Verwandte Themen