Android:SingleTop-Verhalten mit mehreren Absichtsfiltern
-
21-12-2019 - |
Frage
Ich habe mit dem folgenden seltsamen Verhalten von SingleTop-Aktivitäten zu kämpfen.
Ich habe in dieser Aktivität einige Absichtsfilter definiert:
<activity android:name="com.example.DashboardActivity"
android:screenOrientation="landscape"
android:launchMode="singleTop"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<data android:scheme="video" />
<category android:name="android.intent.category.BROWSABLE"/>
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.EDIT" />
<data android:scheme="survey" />
<category android:name="android.intent.category.BROWSABLE"/>
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.CALL" />
<data android:scheme="call" />
<category android:name="android.intent.category.BROWSABLE"/>
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
Dieser Code sollte die Aktivität starten:
webView.setWebViewClient(new WebViewClient()
{
public boolean shouldOverrideUrlLoading(WebView view, String url) {
try {
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse(url));
startActivity(intent);
return true;
} catch(ActivityNotFoundException e) {
Log.e(TAG,"Could not load url"+url);
}
return super.shouldOverrideUrlLoading(view, url);
}
});
Im onResume der DashboardActivity überprüfe ich die entsprechende Aktion:
public void onResume(){
super.onResume();
Fragment fragment = null;
if (Intent.ACTION_VIEW.equals(intent.getAction())) {
extras.putParcelable("uri", getIntent().getData());
fragment = new VideoplayerFragment();
} else {
fragment = new DashboardFragment();
}
addOrReplaceFragment(fragment, extras);
}
Aber wenn ich diesen Code ausführe, erhalte ich immer das android.intent.action.MAIN
Aktion.Wenn ich das entferne singleTop
Im Startmodus startet es eine neue Aktivität, übergibt jedoch die korrekte Absicht.Ich muss also dieselbe Instanz der Aktivität verwenden singleTop
, singleTask
oder singleInstance
muss den Job machen.Aber ich weiß nicht, was hier falsch läuft.HELFEN!
Lösung
Intent.ACTION_VIEW.equals(intent.getAction())
Woher kommt diese Absicht?Um den neuen Intent zu erfassen, müssen Sie ihn verwendenonNewIntent().