Почему этот фильтр намерений не соответствует заданному намерению? - PullRequest
0 голосов
/ 17 января 2020

У меня проблемы с объявлением фильтра Intent. Почему следующий код не работает?

Activity, как объявлено в AndroidManifest.xml:

    <activity
        android:name="com.twoplay.smb.SmbLoginActivity"
        android:label="@string/smb_login_activity_name"
        android:theme="@style/SmbLoginTheme"
        >
        <intent-filter>
            <action android:name="android.provider.action.DOCUMENT_SETTINGS" />
            <category android:name="android.intent.category.DEFAULT" />
            <data android:scheme="content"
                android:host="com.twoplay.netplayer.smb"
                android:mimeType="*/*" />
        </intent-filter>
    </activity>

Код для запуска действия:

    Intent intent = new Intent(DocumentsContract.ACTION_DOCUMENT_SETTINGS);
    intent.setPackage("com.twoplay.netplayer");
    intent.addCategory(Intent.CATEGORY_DEFAULT);
    intent.setData(Uri.parse("content://com.twoplay.netplayer.smb/tree/share%2FLOTHLORIEN"));
    intent.setType("image/png");
    try {
        startActivity(intent);
    } catch (ActivityNotFoundException e) {
        Log.e(TAG, "Failed to view settings in application",e);
    }

При выполнении startActivity выдает следующее исключение:

android.content.ActivityNotFoundException: No Activity found to 
handle Intent { act=android.provider.action.DOCUMENT_SETTINGS 
cat=[android.intent.category.DEFAULT] typ=image/png }

В контексте, я пытаюсь реализовать настройки в документе провайдера документов. Код startActivity вырезан и вставлен из исходного кода Google для приложения пользовательского интерфейса провайдера документов, но выполняется в рамках собственного теста, чтобы я мог его отладить. Пользовательский интерфейс провайдера документов правильно отображает меню «Отображать в», но нажатие на этот пункт меню ничего не делает, и в пользовательском интерфейсе нет видимых ошибок, хотя основной источник android предполагает, что должен быть вызов Log.e, если вызов startActivity потерпел неудачу. В архиве git указано, что исходный код пользовательского интерфейса провайдера документов, на который я смотрел, был "Android 10 Release" (хотя, вероятно, он не совпадает с тем, что есть на моем устройстве).

Запускается целевое действие без проблем при запуске другими способами, поэтому нет очевидных проблем с целевой активностью. Точка останова на Activity.onCreate никогда не достигается при использовании приведенного выше кода. В файле журнала нет ошибок или предупреждений. И никакой явно релевантной информации или отладочных сообщений.

Работает на Android Q.

1 Ответ

1 голос
/ 17 января 2020

Если вы удалите type в обоих местах, это будет исправлено. Но я не знаю, почему происходит сбой при определении типа.

...