• 0
Kitty

Как правильно запустить видео в плеере из своей программы?

Вопросы

На планшете c Андроид 4.4.2 установлены root права. Из андроид маркета установлен MX плеер. В плеере установлена настройка, что он открывает на постоянной основе файлы mp4. Я пытаюсь из своей программы запустить на выполнение файл mp4. Для примера помещаю нужный мне файл mp4 в папку download. Код такой:

  //C++ Builder XE6
  String VideoFileName = System::Ioutils::TPath::Combine(System::Ioutils::TPath::GetSharedDownloadsPath(), "file1.mp4");
  if(FileExists(VideoFileName))
  {
      system(("open " + AnsiString(VideoFileName)).c_str());//ничего не происходит
      ShowMessage(VideoFileName);// /mnt/internal_sd/Download/file1.mp4
  }
  else
  {
      //сюда не попадаем
      ShowMessage(L"Не найден видео файл " + VideoFileName + L". Программа будет закрыта.");
      Application->Terminate();
  }

Ничего не происходит. Видео не воспроизводится. Как правильно?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

3 ответа на этот вопрос

  • 0

Kitty

 

Не уверен что так можно делать а Android. Тут, как и многое другое, надо юзать через Intent-ы (намерения).

Рыться надо по сему поводу на сайтах/форумах по программированию на Android. Ибо в мануалах и демках BDS это скудно освещено.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

Собственно говоря, Android - хоть и linux подобная система, но команда System не распространяется на проигрывание видео в стандартном видео плейeре.

 

Поэтому как правильно заметил konung, проигрывание видео файла в стандартном проигрывателе на платформе Андроид осуществляется при помощи намерений (Intent).

uses
  Androidapi.JNI.GraphicsContentViewText, Androidapi.JNI.Net, Androidapi.Helpers, FMX.Helpers.Android;

{$R *.fmx}

procedure PlayVideo(const AFileName: string);
var
  Intent: JIntent;
  Data: JNet_Uri;
begin
  Intent := TJIntent.JavaClass.init(TJIntent.JavaClass.ACTION_VIEW);
  Data := StrToJURI(AFileName);
  Intent.setDataAndType(Data, StringToJString('video/avi'));
  SharedActivity.startActivity(Intent);
end;

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Гость
Эта тема закрыта для публикации ответов.

  • Похожий контент

    • От fredhack
      Доброго времени суток подскажите пожалуйста как мне получить ссылку из браузера запущенного через intent в общем суть такова:
      1 запускаю браузер через интент с сылкой http://fire-monkey.ru
      2 на ссылке происходит редирект
      3 я попадаю на http://fire-monkey.ru/forum/
      Как получить последнюю ссылку после редиректа? в данном случае она равна http://fire-monkey.ru/forum/
      var Intent: JIntent; begin Intent := TJIntent.Create; Intent.setAction(TJIntent.JavaClass.ACTION_VIEW); Intent.setData(StrToJURI('http://fire-monkey.ru')); SharedActivity.startActivity(Intent); end;  
    • От x11
      Хочу взять пример из этой темы:
      http://fire-monkey.ru/topic/1263-%D0%BE%D1%82%D0%BA%D1%80%D1%8B%D1%82%D0%B8%D0%B5-%D0%B8%D0%B7%D0%BE%D0%B1%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D1%8F-%D0%B8%D0%B7-image-%D0%B2-%D0%B3%D0%B0%D0%BB%D0%B5%D1%80%D0%B5%D0%B5/
      Но среда ругается на JIntent.
      Нажимаю Ctrl+Shift+A - пустота.
      Нажимаю F1 на Jintent - справка ничего не выдает.
      Смотрю пример из справки
      http://docwiki.embarcadero.com/CodeExamples/Berlin/en/FMX.Android_Intents_Sample
      Там тоже нет информации, что нужно подключить в USES.
      Ок, открыл сам пример из папки "C:\Users\Public\Documents\Embarcadero\Studio\18.0\Samples\Object Pascal\Mobile Snippets\AndroidIntents\ReceiveIntent"
      Среда подсказывает, что JInten живет в Androidapi.JNI.GraphicsContentViewText.
      Добавляю в свой модуль в USES Androidapi.JNI.GraphicsContentViewText, но мне среда выдает ошибку "Can not resolve Androidapi.JNI.GraphicsContentViewText"
    • От A. Sharif
      Возможно ли с помощью intent получить от какого-либо из официальных приложений Вконтакте/Фейсбук/Инст/Google access-token (через кол-бэк метод)?
      Предусматривается ли данная возможность этими приложениями? Если кто делал - приведите, пожалуйста, пример получения результата. 
    • От Wovan2
      Здравствуйте.
      Пишу на Delphi 7. И все было нормально пока не у нас не появился терминал сбора данных на Androide. На Delphi 10 написал простенькое приложение. Но тут встала проблема с занесением данных в поле ввода со сканера штрихкода. В инете нашел, что это дело просто решается интентами. Вообще в windows я подобное делал: вешал процесс, следящий за com-портом, и при появлении данных на нем пересылал их куда надо. В Android должно быть не сложнее. Но я запутался во всей этой куче параметров и функций, передаваемых и получаемых "намерениями".
      В общем вот что мы имеем на данный момент.
      В настройках сканера прописано:
       
      Intent output - android.intent.ACTION_DECODE_DATA Intent string extra - barcode_string На просторах нашел запуск BroadcastReceiver.
      На событие получения сообщения повесил 
      ed.Text := JStringToString(csIntent.getExtras.getString(TJIntent.JavaClass.EXTRA_INTENT)); где csIntent параметр из  BroadcastReceiverOnReceive(csContext: JContext; csIntent: JIntent); Но ничего не выходит. 
      Я подозреваю, что данные из сканера где-то в структуре csIntent. Но, к сожалению, в отладке дальше адреса этой переменной пробраться не получилось.
      Причем строка ed.Text := JStringToString(csIntent.getAction); возвращает в Text название интента: "android.intent.ACTION_DECODE_DATA".
      Помогите разобраться со структурой JIntent. Спасибо.
       
       
    • От Rustam Bikeev
      Здравствуйте. Пришла беда откуда не ждал, Delphi 10.2 не знает библиотеки androidapi.... FMX.Helpers.... и тд и тп. И никак не получается их установить, либо я тупой либо я даже незнаю что может быть. фалы *.dcu лежат в папке ...\lib\android\release.
      Помогите решить проблему очень нужно использовать намерения. уже и переустанавливал платформу android не помогает.

    • От AlexShaman
      procedure TfMain.PhotoClick(Sender: TObject); var sPath,FLastPhotoName:string;   {$IF DEFINED(ANDROID)}   PhotoIntent: JIntent;   photoUri: Jnet_Uri;   JFileName: JFile;   {$ENDIF} begin   {$IF DEFINED(ANDROID)}   FLastPhotoName := '';   FLastPhotoFullName := '';   FMessageSubscriptionID := TMessageManager.DefaultManager.SubscribeToMessage(TMessageResultNotification, HandleActivityMessage);   PhotoIntent := TJIntent.JavaClass.init(TJMediaStore.JavaClass.ACTION_IMAGE_CAPTURE);   if (PhotoIntent.resolveActivity(TAndroidHelper.Context.getPackageManager()) <> nil) then   begin     FLastPhotoName := THashMD5.GetHashString('JPEG PHOTO FILE ' + DateTimeToStr(Now)) + '.jpg';     FLastPhotoFullName := TPath.Combine(TPath.GetSharedDocumentsPath, FLastPhotoName);     JFileName := TJFile.JavaClass.init(StringToJString(FLastPhotoFullName));     photoUri := TJnet_Uri.JavaClass.fromFile(JFileName);     PhotoIntent.putExtra(TJMediaStore.JavaClass.EXTRA_OUTPUT,         TJParcelable.Wrap((photoUri as ILocalObject).GetObjectID));     if PhotoIntent.resolveActivity(TAndroidHelper.Activity.getPackageManager) <> nil then       TAndroidHelper.Activity.startActivityForResult(PhotoIntent, REQUEST_IMAGE_CAPTURE);   end;   {$ENDIF}  
      Приложение камеры открывается, фото делается, но при закрытии приложение вылетает
      В логах ошибки
      java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=1, result=-1, data=null} to activity {com.embarcadero.test/com.embarcadero.firemonkey.FMXNativeActivity}: java.lang.NullPointerException
       
    • От ENERGY
      Подскажите пожалуйста как определить что программа запустилась из AlarmManager?
      Я сделал это так, по аналогии с http://stackoverflow.com/questions/6751564/how-to-pass-a-boolean-between-intents
      В Java коде, который компилиться в итоге в classes.dex (с XE7 не нужен DEX файл, можно подключить Jar файл сразу к проекту!), добавил строчку
      public class AlarmReceiver extends BroadcastReceiver {
          public void onReceive(Context context, Intent intent) {
                  Intent TestLauncher = new Intent();                        
                  TestLauncher.setClassName(context, "com.embarcadero.firemonkey.FMXNativeActivity");
                  TestLauncher.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                  TestLauncher.putExtra("StartedFromAM", true);
                  context.startActivity(TestLauncher);
          }
      }
      По идее теперь при старте из AlarmManager, должно быть true в активити.
      Из Delphi пытаюсь получить это значение, но всегда возвращает false (0). 
       ShowMessage(SharedActivity.getIntent.getBooleanExtra(StringToJString('StartedFromAM'), false).ToString );
      И вот так тоже:
      ShowMessage ( MainActivity.getIntent.getBooleanExtra(StringToJString('StartedFromAM'), false).ToString);
      Не подскажете в чем может быть проблема?

       
    • От Pax Beach
      В Android 6 на Berlin 10.1.1 перестала работать стандартная функция TakePhotoFromCameraAction.

      Иногда работает, иногда нет.
      Поэтому я решил написать нативную замену этой функции. За основу взят пример с портала разработчиков Android.
      Мой пример про видео на базе отправки Intetn смартфону и получение результата в виде другого Intent, отлично работает.
      Но для фотографий этот пример сыпется, после выполнения фотографирования система возвращается в мое приложение и оно вылетает с ошибкой:
      Если заглянуть в исходнки, там все обвязано сообщениями в лог монитора. Последнее сообщение «+ Intent is sent».
      Помогите пожалуйста разобраться, в чем может быть проблема?
       
      PhotoIntent.zip
    • От Pax Beach
      Обещал вам продемонстрировать возможность записи видео в Android.
      Представляю решение с исходными кодами (VideoRecord.zip) для изучения этой возможности и использования в своих проектах.
      На представленном снимке есть 2 главных кнопки: "Modal Intent Record" и "Native Record".

       
      Modal Intent Record — удобно использовать в приложениях, потому что запись ведется приложением камеры, поставляемым с телефоном. После съемки в приложение возвращается сообщение о результатах — удачно/неудачно.
      Native Record — метод на базе интерфейса JMediaRecorder, используется, когда Intent Record не подходит. Например в Local Android сервисе ;-)
      Пользуйтесь на здоровье.
       
      Большая просьба к сообществу — помочь в комментариях с подбором оптимальных параметров записи видео в JMediaRecorder. Установленные сейчас параметры 640х480, и качество видео хромает.
      Нужно научиться переключать камеры, менять степень сжатия, включать/выключать вспышку, звук затвора.
       
      Здесь люди уже подбирали варианты параметров, но нужно протестировать на приложении из RAD Studio.
      На ресурсе разработчиков Android тема по JMediaRecorder находится здесь.
       
    • От Pax Beach
      Знающие люди, подскажите пожалуйста, как в iOS одно приложение может запустить другое приложение, как передать картинку в другое приложение, готовое его принять, как при запуске обрабатывать в своем приложении параметры, переданные из другого приложения?
      В Android для этого есть механизм Intent Filter, а как это устроено в iOS, и как с этим работать в RAD Studio?
       
  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу