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);
}
}
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