Получение файла из e-mail и чтение его содержимого через android-приложение

Для начала необходимо добавить код intent_filter в файле AndroidManifest для той Activity которая будет отвечать за обработку открытия файла с расширением .vnnt. Расширение может быть любым, желательно чтобы оно было уникальным.

<intent-filter>
<action android:name="android.intent.action.VIEW" />

<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="file" />
<data android:scheme="content" />
<data android:mimeType="*/*" />
<data android:pathPattern=".*\\.vnnt" />
<data android:pathPattern=".*\\..*\\.vnnt" />
<data android:pathPattern=".*\\..*\\..*\\.vnnt" />
<data android:pathPattern=".*\\..*\\..*\\..*\\.vnnt" />
<data android:host="*" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.BROWSABLE" />
<category android:name="android.intent.category.DEFAULT" />
<data android:scheme="http" />
<data android:scheme="content" />
<data android:host="*" />
<data android:pathPattern=".*\\.vnnt" />
<data android:pathPattern=".*\\..*\\.vnnt" />
<data android:pathPattern=".*\\..*\\..*\\.vnnt" />
<data android:pathPattern=".*\\..*\\..*\\..*\\.vnnt" />
</intent-filter>
<intent-filter android:label="@string/app_name">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<data android:scheme="content" />
<data android:mimeType="application/octet-stream" />
</intent-filter>

Последний intent-filter необходим в случае использования Gmail или Samsung Email App в качестве e-mail. Для Outlook необходимо указать так же

<data android:mimeType="application/my-custom-extension"/>

Далее для получения содержимого файла в виде текста подойдет вот такой метод в Activity (необходим Intent полученный из getIntent() для получения Uri):

public void getContentName(Context context) {
Uri uri = getIntent().getData();
    try {
        InputStream inputStream = getContentResolver().openInputStream(uri);

        int size = inputStream.available();

        byte[] bytes = new byte[size];

        inputStream.read(bytes);

        inputStream.close();

        String jsonString = null;
        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.KITKAT) {
            jsonString = new String(bytes, StandardCharsets.UTF_8);
        }
        AlertDialog.Builder builder = new AlertDialog.Builder(context);

        builder.setTitle("File Content");
        builder.setMessage(jsonString);
        builder.setPositiveButton("OK", null);

        builder.create().show();
    } catch (IOException e) {
        Toast.makeText(context, "Fail to read file", Toast.LENGTH_SHORT).show();
    }
}
Print Friendly, PDF & Email

Добавить комментарий