私の質問
SMSの受信を待っている間にAndroidでプログレスバーを表示するには?
ダイアログは次の条件を満たす必要があります
- ダイアログは、最大 5 分間閉じる必要があります。
- SMS が 5 分前に受信された場合、ダイアログは閉じる必要があります。
私が試したこと
public class GetSMS extends Activity {
...
...
private boolean progressDialogFlag;
private ProgressDialog progressDialog;
...
...
new SMSReceiver().execute();
}
public class SMSReceiver extends AsyncTask<Void, Integer, Void> {
protected void onPreExecute() {
// start a progressdialog box
super.onPreExecute();
progressDialogFlag = true;
progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
progressDialog.setMessage("Waiting to Receive SMS...");
progressDialog.setCancelable(false);
progressDialog.show();
}
protected void onProgressUpdate(Integer... progress) {
super.onProgressUpdate(progress);
if (progressDialogFlag == true) {
progressDialog.setProgress(progress[0]);
}
if (progress[0] == 100 || progressDialogFlag == false) {
progressDialog.dismiss();
}
}
protected void onPostExecute(Void result) {
}
@Override
protected Void doInBackground(Void... params) {
int interval = 2;
int totalDuration = 5 * 60 * 1000; // 5 min
int sleepPeriod = (totalDuration / 100) * interval;
for (int i = 2; i <= 100; i += 2) {
publishProgress(i);
try {
Thread.sleep(sleepPeriod);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
return null;
}
}
smsReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
progressdialog = false;
}
}
私の疑問は何ですか
- 5 分前に SMS を受信し
progressDialogFlag
たときに を閉じるために を使用すると、問題が発生すると思います。progressDialog
- UI およびワーカー スレッドで変数
progressDialogFlag
を使用すると、ある種の競合状態が発生します。
手伝ってくれてありがとう。