上面代码执行id完成后如何使Intent 运行
How to make Intent run after the above code execution id completed
我试图制作一个应用程序来在 android 工作室中剪切视频,然后将其分享到某个应用程序。但是共享似乎甚至在切割过程完成之前就已经发生了
我的代码:
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);
请检查execFFmpegBinary是否为异步方法
所以你需要一个回调函数,一旦切割完成就会被调用。这样您就可以开始共享意图。
要实现此行为,您可以考虑使用这样的界面。
public interface CuttingCompleted {
void onCuttingCompleted(String[] vidUris);
}
现在 AsyncTask
在后台线程中进行切割,完成后将结果传递给回调函数以进一步执行代码流。
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);
}
}
现在,您需要根据 Activity
实现界面,以便在切割过程完全完成时开始共享意图。
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);
}
}
我试图制作一个应用程序来在 android 工作室中剪切视频,然后将其分享到某个应用程序。但是共享似乎甚至在切割过程完成之前就已经发生了
我的代码:
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);
请检查execFFmpegBinary是否为异步方法
所以你需要一个回调函数,一旦切割完成就会被调用。这样您就可以开始共享意图。
要实现此行为,您可以考虑使用这样的界面。
public interface CuttingCompleted {
void onCuttingCompleted(String[] vidUris);
}
现在 AsyncTask
在后台线程中进行切割,完成后将结果传递给回调函数以进一步执行代码流。
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);
}
}
现在,您需要根据 Activity
实现界面,以便在切割过程完全完成时开始共享意图。
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);
}
}