Обнаружено, как это сделать. Надеюсь, это может помочь кому-то другому. Сторона моя, частично от других должностей. Он предназначен для обработки прикрепленных файлов .gcsb.
Намерение-фильтр
<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:mimeType="application/octet-stream" />
</intent-filter>
и код в деятельности OnCreate()/onRestart() является
Intent intent = getIntent();
InputStream is = null;
FileOutputStream os = null;
String fullPath = null;
try {
String action = intent.getAction();
if (!Intent.ACTION_VIEW.equals(action)) {
return;
}
Uri uri = intent.getData();
String scheme = uri.getScheme();
String name = null;
if (scheme.equals("file")) {
List<String> pathSegments = uri.getPathSegments();
if (pathSegments.size() > 0) {
name = pathSegments.get(pathSegments.size() - 1);
}
} else if (scheme.equals("content")) {
Cursor cursor = getContentResolver().query(uri, new String[] {
MediaStore.MediaColumns.DISPLAY_NAME
}, null, null, null);
cursor.moveToFirst();
int nameIndex = cursor.getColumnIndex(MediaStore.MediaColumns.DISPLAY_NAME);
if (nameIndex >= 0) {
name = cursor.getString(nameIndex);
}
} else {
return;
}
if (name == null) {
return;
}
int n = name.lastIndexOf(".");
String fileName, fileExt;
if (n == -1) {
return;
} else {
fileName = name.substring(0, n);
fileExt = name.substring(n);
if (!fileExt.equals(".gcsb")) {
return;
}
}
fullPath = ""/* create full path to where the file is to go, including name/ext */;
is = getContentResolver().openInputStream(uri);
os = new FileOutputStream(fullPath);
byte[] buffer = new byte[4096];
int count;
while ((count = is.read(buffer)) > 0) {
os.write(buffer, 0, count);
}
os.close();
is.close();
} catch (Exception e) {
if (is != null) {
try {
is.close();
} catch (Exception e1) {
}
}
if (os != null) {
try {
os.close();
} catch (Exception e1) {
}
}
if (fullPath != null) {
File f = new File(fullPath);
f.delete();
}
}
Это, кажется, работает в стандартных Gmail для Android и почтовых приложений. Имя файла получается два разных способа, в зависимости от того, была ли нажата «загрузка» (файл схемы) или «предварительный просмотр» (содержимое схемы) в gmail.
Обратите внимание, что чрезвычайно важно, чтобы действие не было единым экземпляром.
Спасибо так много! Я несколько часов задерживался на этом. – sigmabeta
Кстати, вы знаете, необходимы ли какие-либо разрешения для выполнения вышеуказанного кода? – sigmabeta
Спасибо, работал прямо! – mifthi