My App отправляет файлы (все типы mime) по TCP-соединению, и поэтому я хотел, чтобы мое приложение отображалось в меню Android Share.
Я добавил следующие фильтры намерений в свою активность в AndroidManifest.xml
<intent-filter ><!--intent filter for single file sharing-->
<action android:name="android.intent.action.SEND" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="*/*" />
</intent-filter>
<intent-filter ><!--intent filter for sharing multiple files-->
<action android:name="android.intent.action.SEND_MULTIPLE" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="*/*" />
</intent-filter>
Теперь я добавил это к Activity
, который должен быть запущен при нажатии действия Share
Intent intent = getIntent();
if (Intent.ACTION_SEND.equals(intent.getAction()))
{
Uri uri = (Uri) intent.getParcelableExtra(Intent.EXTRA_STREAM);
if (uri != null) {
fileset = new HashSet();
fileset.add(getPathfromUri(uri));
}
}
else if (Intent.ACTION_SEND_MULTIPLE.equals(intent.getAction()))
{
ArrayList<Uri> uris= intent.getParcelableArrayListExtra(Intent.EXTRA_STREAM);
if (uris != null) {
fileset = new HashSet();
for(Uri uri : uris)
{
fileset.add(getPathfromUri(uri));
}
}
}
Я использую этот метод для создания абсолютных путей файлов, которые должны быть разделены.
public String getPathfromUri(Uri uri) {
if(uri.toString().startsWith("file://"))
return uri.getPath();
String[] projection = { MediaStore.Images.Media.DATA };
Cursor cursor = managedQuery(uri, projection, null, null, null);
startManagingCursor(cursor);
int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
String path= cursor.getString(column_index);
//cursor.close();
return path;
}
Вышеупомянутый метод правильно извлекает абсолютный путь к изображениям/видео и другим файлам. Есть ли что-то, что я пропустил, или есть лучший способ сделать это?
В дополнение к меню Share
на моем телефоне есть меню Send Via
.
Есть ли способ получить мое приложение в этом списке?