Начало деятельности из IntentService - PullRequest
2 голосов
/ 04 февраля 2020

Уже много раз отвечали на SO:

  1. FLAG_ACTIVITY_NEW_TASK Ошибка флага для совместного использования в пользовательском блесне

Этот ответ не является работать больше над уровнем API 23 и выше. предыдущие ответы устарели.

Я также ссылался на официальную https://developer.android.com/training/sharing/send

Что такое сцена:

У меня есть аудиофайл, чтобы поделиться с способными приложениями, которые поддерживают ACTION_SEND. Я пытаюсь это сделать из intentService

То, что я пытаюсь с тех пор, как более часа:

Uri uri = Uri.parse(PATH);
Intent share = new Intent(Intent.ACTION_SEND, uri);
share.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
share.putExtra(Intent.EXTRA_STREAM, uri);
this.getApplicationContext().startActivity(share);

Исключение: вызов startActivity () извне контекста действия требуется флаг FLAG_ACTIVITY_NEW_TASK.

После многократного изменения кода он начал работать с Gmail, но затем я получил: Исключение: android .os.FileUriExposedException: file: /// storage /emulated/0/test.mp3 раскрывается вне приложения через Intent.getData ()

Затем я получил разрешение на чтение, например:

PackageManager packageManager = context.getPackageManager();
Intent shareIntent = new Intent(android.content.Intent.ACTION_SEND);
shareIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
shareIntent.setAction(Intent.ACTION_SEND);
shareIntent.setType("audio/*");
shareIntent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
shareIntent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(new File(PATH)));

if ( shareIntent.resolveActivity(packageManager) != null )
{
     startActivity(shareIntent);
}
else
{
     Log.d("SEND :", "shareAction: NO APP \n");
}

Исключение: вызов startActivity ( ) извне контекста действия требуется флаг FLAG_ACTIVITY_NEW_TASK.

Что меня беспокоит:

  1. Является ли android недостаточно умным, что является не находит FLAG_ACTIVITY_NEW_TASK?
  2. Разве android хочет, чтобы я сначала открыл активность своих приложений, а затем я должен startactivity только из активности?
  3. Уже после того, как все улажено, уведомитель класс предоставил уведомление, в котором tentservice для обработки кнопок SHARE или CANCEL в уведомлении в качестве параметров. Теперь я должен снова создать новое действие, которое снова получит эти преднамеренные дополнения, поступающие из нескольких классов и на большие расстояния, если android захочет обременять разработчика только продолжением перемещения данных для несколько раз за одно задание?
  4. Что на самом деле нужно?

Заранее спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...