Android получает доступ к текстовому файлу, но не может делиться текстовым контентом - PullRequest
5 голосов
/ 02 марта 2012

Я создаю приложение, которое может загружать один или несколько файлов или папок. Фильтр намерений определяется следующим образом:

    <activity android:name=".UploadActivity" android:launchMode="singleTop" android:theme="@style/Theme.Sherlock">
        <intent-filter android:label="@string/upload_intent">
            <action android:name="android.intent.action.SEND" />
            <category android:name="android.intent.category.DEFAULT" />
            <category android:name="android.intent.category.BROWSABLE" />
            <data android:mimeType="application/*" />
            <data android:mimeType="audio/*" />
            <data android:mimeType="image/*" />
            <data android:mimeType="media/*" />
            <data android:mimeType="multipart/*" />
            <data android:mimeType="text/*" />
            <data android:mimeType="video/*" />
        </intent-filter>
        <intent-filter android:label="@string/upload_intent">
            <action android:name="android.intent.action.SEND_MULTIPLE" />
            <category android:name="android.intent.category.DEFAULT" />
            <category android:name="android.intent.category.BROWSABLE" />
            <data android:mimeType="*/*" />
        </intent-filter>
    </activity>

Это прекрасно работает с Blackmoon File Explorer и галереей Android 4.0.3. Мое приложение отображается в меню «Поделиться». Тем не менее, он также отображается в браузере, когда вы долго нажимаете на URL и выбираете «Поделиться страницей».

Когда я отправляю текстовый файл в свое приложение, я получаю следующее:

getIntent().getAction() returns Intent.ACTION_SEND
getIntent().getType() returns "text/plain"
getIntent().getScheme() returns null
getIntent().getExtras().getString(Intent.EXTRA_STREAM) returns the filename

Однако отправка URL-адреса из браузера возвращает то же самое минус Intent.EXTRA_STREAM. Я легко могу обнаружить это в коде и сказать «эй, я не могу загрузить текст!» но я бы предпочел изменить фильтр намерений, чтобы он срабатывал только при наличии EXTRA_STREAM. Возможно ли это сделать?

(Я пытался использовать схему android:, но она не будет различать файл и текстовую строку для совместного использования, поскольку они оба нулевые ...)

Ответы [ 2 ]

3 голосов
/ 05 января 2014

У вас есть:

getIntent().getExtras().getString(Intent.EXTRA_STREAM) returns the filename

AFAIK, Android никогда не отправляет вам открытый файл или сокет в файл.Просто простой, старый путь к файлу, который вы затем обрабатываете:

File somefile = new File(filename);

И затем читаете его или пишете в него, или нет.

Что касается входящего текста EXTRA_TEXTили STREAM, просто проверьте оба и обработайте соответствующим образом.Надеюсь, это поможет.

0 голосов
/ 08 сентября 2018

Я зарегистрировался на file в манифесте:

<activity android:name=".ReaderActivity">
    <intent-filter >
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.DEFAULT" />
        <data android:scheme="file"/>
        <data android:mimeType="text/plain"/>
    </intent-filter>
</activity>

А затем использовал getData() и распознаватель контента в моей деятельности.

Uri uri = getIntent().getData();
InputStream inputStream = getContentResolver().openInputStream(uri);
...

См. этот ответ , чтобы узнать, что такое ....

...