2014-10-10 2 views
0

У меня проблема. Мне нужно создать службу, которая отправляет mp3-файл, который синтезирует голос из строки, выбранной с помощью действия, или файла mp4. Я могу создать mp3-файл и файл mp4. Я также знаю, как установить один из них в меню общего доступа.Как отправлять разные файлы в зависимости от того, какое приложение мы выбрали в меню общего доступа?

Моя проблема в том, что я хочу видеть все приложения, которые могут обрабатывать файлы MP3 и mp4, а затем отправлять нужный файл в выбранное приложение.

вот мой код:

public void setShareContent(MenuItem item, ShareActionProvider mShareActionProvider) { 
     this.setActionMenu(item,mShareActionProvider); 
     Intent mIntent = new Intent(); 
     mIntent.setAction(Intent.ACTION_SEND); 
     Uri uri = Uri.parse("file:///"+Environment.getExternalStorageDirectory()+"/sounds/hello.mp3"); 

     mIntent.putExtra(Intent.EXTRA_STREAM,uri); 
     mIntent.setType("audio/mp3"); 
     mShareActionProvider.setShareIntent(mIntent); 
    } 

    private void setActionMenu(MenuItem item, ShareActionProvider mShareActionProvider) { 
     mShareActionProvider = (ShareActionProvider) item.getActionProvider(); 
    } 

И мой слушатель от моей деятельности:

btn.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       message = text.getText().toString(); 
       myHashReader = new HashMap<String, String>(); 
       myHashReader.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID, message); 

       String exStroragePath = Environment.getExternalStorageDirectory().getAbsolutePath(); 

       File tmpPath = new File(exStroragePath + "/sounds/"); 
       tmpPath.mkdirs(); 

       String tmpFileName = "hello.mp3"; 

       tmpDestFile = tmpPath.getAbsolutePath() + "/" + tmpFileName; 
       new MySpeech(MyActivity.this, message, tmpDestFile); 
       myService.setShareContent(item, mShareActionProvider); 
      } 
     }); 

Я заблокирован дней ...

ответ

0

Creat Chooser что-то вроде этого:

  Intent intent = new Intent(Intent.ACTION_GET_CONTENT, null); 
      intent.setType("mp3/*"); 

      Intent musicIntent = new Intent(android.provider....); 

      Intent chooser = new Intent(Intent.ACTION_CHOOSER); 
      chooser.putExtra(Intent.EXTRA_INTENT, musicIntent); 
      chooser.putExtra(Intent.EXTRA_TITLE, "Select from:"); 

      Intent[] intentArray = { musicIntent }; 
      chooser.putExtra(Intent.EXTRA_INITIAL_INTENTS, intentArray); 
      startActivityForResult(chooser, REQUEST_PIC); 
+0

Это, кажется, именно то, что я ищу, но я не понимаю строка: Intent musicIntent = новый Intent (android.provider ....); Что бы я добавил в этот конструктор? Спасибо – Quentin

+0

Я не уверен, что провайдер для музыкального провайдера ... :) попробуйте ctrl + space, чтобы увидеть, есть ли какие-либо предложения для изображений, это android.provider.MediaStore.ACTION_IMAGE_CAPTURE – SpyZip

1

It fina lly работает! Ваш код помог мне много, но я не делал то, что вы сказали мне делать, вот мой код:

public void setShareContent(MenuItem item, ShareActionProvider mShareActionProvider) { 
        this.setActionMenu(item,mShareActionProvider); 
        Intent mIntent = new Intent(); 
        Uri uri = Uri.parse("file:///"+Environment.getExternalStorageDirectory()+"/sounds/hello.mp3"); 

        mIntent.putExtra(Intent.EXTRA_STREAM,uri); 
        mIntent.setType("audio/mp3"); 

        Intent intent = new Intent(Intent.ACTION_GET_CONTENT, null); 
        intent.setType("mp3/*"); 

        Intent chooser = new Intent(Intent.ACTION_CHOOSER); 
        chooser.putExtra(Intent.EXTRA_TITLE, "Select from : "); 
        chooser.putExtra(Intent.EXTRA_INTENT, mIntent); 

        mShareActionProvider.setShareIntent(chooser); 
       } 

       private void setActionMenu(MenuItem item, ShareActionProvider mShareActionProvider) { 
        mShareActionProvider = (ShareActionProvider) item.getActionProvider(); 
       } 
Смежные вопросы