我注意到在较旧的设备上,一旦你执行了标准的共享意图(fb,推特,电子邮件等),在弹出实际的共享对话框之前会有几秒钟的延迟。我想知道在等待显示这个共享对话框时如何弹出进度对话框?
这是我的代码:
private void share(String subject,String body) {
Intent share = new Intent(Intent.ACTION_SEND);
share.setType("text/plain");
share.putExtra(android.content.Intent.EXTRA_SUBJECT, title);
share.putExtra(android.content.Intent.EXTRA_TEXT, body);
startActivity(Intent.createChooser(share, "Share via"));
}
答案 0 :(得分:5)
我想出了怎么做。当您调用startActivity(shareIntent)时,将调用方法中的onPause。所以为了解决这个问题,我做了以下几点:
if(dialog.isShowing()){
dialog.dismiss();
}
答案 1 :(得分:1)
这似乎不可能 - 您无法知道Intent Chooser何时准备好显示。就您的应用而言,这似乎是一种异步操作。
要确认这一点,您可以尝试计时功能:
private void share(String subject,String body) {
//Timing code
long startTime = System.currentTimeMillis();
Intent share = new Intent(Intent.ACTION_SEND);
share.setType("text/plain");
share.putExtra(android.content.Intent.EXTRA_SUBJECT, title);
share.putExtra(android.content.Intent.EXTRA_TEXT, body);
startActivity(Intent.createChooser(share, "Share via"));
//Timing code
long endTime = System.currentTimeMillis();
Log.d("Test", "Time for share function: " + (endTime-startTime) + "ms");
}
如果得到一个非常小的结果,这意味着你的功能正在快速执行,瓶颈在于Android系统本身(你不能影响)。
另一方面,如果你得到大约500+毫秒的东西,可能值得使用XepterX和display a Progress Dialog描述的方法。
答案 2 :(得分:1)
我建议采用以下方法:
以下是代码:
ProgressDialog shareWaitDialog;
private void shareIt() {
String subject="Subject";
String text = "text....";
shareWaitDialog = new ProgressDialog(getActivity());
shareWaitDialog.setTitle("Sharing...");
shareWaitDialog.setMessage(subject);
shareWaitDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
shareWaitDialog.show();
Intent sharingIntent = new Intent(android.content.Intent.ACTION_SEND);
sharingIntent.setType("text/plain");
sharingIntent.putExtra(android.content.Intent.EXTRA_SUBJECT,
subject);
sharingIntent.putExtra(android.content.Intent.EXTRA_TEXT,
text));
startActivity(Intent.createChooser(sharingIntent,
"Share using:"));
}
@Override
public void onResume() {
if (shareWaitDialog != null && shareWaitDialog.isShowing())
shareWaitDialog.hide();
super.onResume();
}
答案 3 :(得分:0)
显示对话框似乎非常困难,相反,您可以在共享按钮上显示“等待应用...”等Toast。 Toast可以填补时间空间。
mShare.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(ReferralActivity.this, "Waiting for Apps to Send", Toast.LENGTH_SHORT).show();
try {
String sAux = "Content To Share";
Intent i = new Intent(Intent.ACTION_SEND);
i.setType("text/plain");
i.putExtra(Intent.EXTRA_SUBJECT, "Sample");
i.putExtra(Intent.EXTRA_TEXT,sAux);
startActivity(Intent.createChooser(i, "Share using:"));
} catch(Exception e) {
//e.toString();
}
}
});
答案 4 :(得分:0)
You Can try this code:
void share(String link) {
final ProgressDialog ringProgressDialog = ProgressDialog.show(this, "", getString(R.string.please_wait), true);
ringProgressDialog.setCancelable(false);
new Thread(new Runnable() {
public void run() {
try {
shareTextUrl(link);
} catch (Exception e) {
}
ringProgressDialog.dismiss();
}
}).start();
ringProgressDialog.setOnDismissListener(new DialogInterface.OnDismissListener() {
@Override
public void onDismiss(DialogInterface dialog) {
}
});
}
答案 5 :(得分:-1)
您可以使用AsyncTask()来帮助您显示对话框进度,例如
private class TestTask extends AsyncTask<Void, Void, Void> {
protected void onPreExecute() {
//show dialog
}
protected void doInBackground(Object... params) {
private void share(subject,body);
}
protected void onPostExecute(Long result) {
//cancel dialog
}
}
并按
开始任务new TestTask().execute();
您可以从the documentation here找到有关AsyncTask()的更多信息。