2017-06-23 3 views
0

Ich habe versucht, eine Anwendung zu erstellen, um Videos in Android Studio zu schneiden und später an einige App zu teilen. Aber die gemeinsame Nutzung scheint sogar Platz zu nehmen, bevor der Schneidvorgang abgeschlossen istWie Intent ausgeführt werden soll, nachdem die obige Code-Ausführungs-ID fertiggestellt wurde

Mein Code:

vidUris.add(Uri.fromFile(new File(dest.getAbsolutePath()))); 
String[] complexCommand = {"-i", yourRealPath, "-ss", "" + startMs, "-t", ""+leng , dest.getAbsolutePath()}; 
execFFmpegBinary(complexCommand); 

Intent shareIntent = new Intent(); 
shareIntent.setAction(Intent.ACTION_SEND_MULTIPLE); 
shareIntent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, vidUris); 
shareIntent.setType("video/*"); 
startActivity(shareIntent); 

Antwort

1

Bitte überprüfen Sie, ob execFFmpegBinary eine asynchrone Methode.

0

Sie benötigen also eine Callback-Funktion, die aufgerufen wird, sobald der Schnitt beendet ist. So können Sie die Freigabeabsicht starten.

Um dieses Verhalten zu erreichen, sollten Sie eine solche Schnittstelle in Betracht ziehen.

public interface CuttingCompleted { 
    void onCuttingCompleted(String[] vidUris); 
} 

nehmen nun ein AsyncTask das Schneiden in einem Hintergrund-Thread zu tun, und wenn es fertig ist das Ergebnis der Funktion für den Rückruf übergibt die weitere Ausführung des Codes fließen.

public class CuttingVideoAsyncTask extends AsyncTask<Void, Void, String[]> { 

    private final Context mContext; 
    public CuttingCompleted mCuttingCompleted; 

    CuttingVideoAsyncTask(Context context, CuttingCompleted listener) { 
     // Pass extra parameters as you need for cutting the video 
     this.mContext = context; 
     this.mCuttingCompleted = listener; 
    } 

    @Override 
    protected String[] doInBackground(Void... params) { 
     // This is just an example showing here to run the process of cutting. 
     String[] complexCommand = {"-i", yourRealPath, "-ss", "" + startMs, "-t", ""+leng , dest.getAbsolutePath()}; 
     execFFmpegBinary(complexCommand); 
     return complexCommand; 
    } 

    @Override 
    protected void onPostExecute(String[] vidUris) { 
     // Pass the result to the calling Activity 
     mCuttingCompleted.onCuttingCompleted(vidUris); 
    } 

    @Override 
    protected void onCancelled() { 
     mCuttingCompleted.onCuttingCompleted(null); 
    } 
} 

Jetzt von Ihrem Activity müssen Sie die Schnittstelle implementieren, so dass Ihre Sharing Absicht beginnt, wenn der Schneidvorgang vollständig abgeschlossen ist.

public class YourActivity extends Activity implements CuttingCompleted { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     // ... Other code 

     new CuttingVideoAsyncTask(this, this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); 
    } 

    @Override 
    public void onCuttingCompleted(String[] vidUris) { 
     Intent shareIntent = new Intent(); 
     shareIntent.setAction(Intent.ACTION_SEND_MULTIPLE); 
     shareIntent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, vidUris); 
     shareIntent.setType("video/*"); 
     startActivity(shareIntent); 
    } 
} 
+0

Mit AsyncTask versucht, aber die Aktivität wird unmittelbar nach dem Aufruf des Schneidvorgangs beendet. Geben von D/AndroidRuntime: Herunterfahren der VM I/Prozess: Senden des Signals. PID: 2346 SIG: 9 – abhinavtk

Verwandte Themen