-2

私は Android 開発にかなり慣れていないので、基本的なアプリから始めようと思いました。ボタンを押すと、コードに記述された場所にファイルがコピーされます (以下のコードを参照)。インストール ボタンを押して、ファイルがその場所にコピーされたときに、トースト メッセージに「正常にインストールされたか、ファイルのコピー中にエラーが発生しました」と表示されるようにします。これをどのように実装しますか?

public class TrialActivity extends Activity {

private ProgressDialog progressDialog;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);


    runDialog(5);
}

private void runDialog(final int seconds)
{
    progressDialog = ProgressDialog.show(this, "Please Wait...", "unpacking patch in progress");

    new Thread(new Runnable(){
        public void run(){
            try {
                Thread.sleep(seconds * 1000);
                progressDialog.dismiss();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }).start();

    ((Button)findViewById(R.id.button1)).setOnClickListener(new View.OnClickListener()
    {
      public void onClick(View paramView)
      {

      }

   {

              InputStream in = null;
              OutputStream out = null;
  String filename="savegame.bin";           
  try {    

                in = getResources().openRawResource(R.raw.savegame);
                out = new FileOutputStream("/sdcard/Android/data/files/" + filename);
                copyFile(in, out);
                in.close();
                in = null;
                out.flush();
                out.close();
                out = null;
              } catch(Exception e) {
                  Log.e("tag", e.getMessage());
              }       

      }
      private void copyFile(InputStream in, OutputStream out) throws IOException {
          byte[] buffer = new byte[1024];
          int read;
          while((read = in.read(buffer)) != -1){
            out.write(buffer, 0, read);


          }
      }
      }
    );
  }

}
4

2 に答える 2

1

次のコードを使用します。

    private class AsyncTaskDialog extends AsyncTask<Void, Void, Void> {
    Toast toastSuccess;


    boolean flagSuccessCopy =false;
            protected void onPreExecute() {
                super.onPreExecute();


                }
            }

            protected Boolean doInBackground(Void... params) {
                copyFiles();
                return null;
            }

            @Override
            protected void onPostExecute(Boolean result) {
                super.onPostExecute(result); 

              if (getActivity() != null) {
                 if(flagSuccessCopy){
                  toastSuccess  = Toast.makeText(context, "Success", duration);
                 }else{
                      toastSuccess  = Toast.makeText(context, "Error", duration);
                 }
                toast.show();               
            }
        }
于 2012-09-13T16:43:12.400 に答える
-1

任意のアプリケーションから任意のファイルを SD カードにコピーできます

import ru.gelin.android.sendtosd.R;
import android.app.Activity;
import android.app.AlertDialog;
import android.widget.ProgressBar;
import android.widget.TextView;

public class ProgressDialog extends AlertDialog implements Progress {

/** Activity for which the dialog is created */

Activity activity;

/** Progress manager for the dialog */
ProgressManager manager = new ProgressManager();

/**
 *  Creates the customized progress dialog for
 *  activity.
 */
protected ProgressDialog(Activity activity) {
    super(activity);
}

@Override
public void setFiles(int files) {
    synchronized (manager) {
        manager.setFiles(files);
    }
    activity.runOnUiThread(new Runnable() {
        @Override
        public void run() {
            synchronized (manager) {
                updateTotalProgress();
            }
        }
    });
}

@Override
public void nextFile(final File file) {
    synchronized (manager) {
        manager.nextFile(file);
    }
    activity.runOnUiThread(new Runnable() {
        @Override
        public void run() {
            synchronized (manager) {
                updateFileName(file);
                updateFileProgress();
                updateTotalProgress();
            }
        }
    });
}

@Override
public void processBytes(long bytes) {
    synchronized (manager) {
        manager.processBytes(bytes);
    }
    activity.runOnUiThread(new Runnable() {
        @Override
        public void run() {
            synchronized (manager) {
                updateFileProgress();
            }
        }
    });
}

void updateTotalProgress() {
    ProgressBar progress = (ProgressBar)findViewById(R.id.total_progress);
    progress.setMax(manager.getFiles());
    progress.setProgress(manager.getFile());
    TextView text = (TextView)findViewById(R.id.total_files);
    text.setText(getContext().getString(R.string.files_progress,
            manager.getFile(), manager.getFiles()));
}

void updateFileName(File file) {
    if (file == null) {
        return;
    }
    TextView view = (TextView)findViewById(R.id.file_name);
    view.setText(file.getName());
}

void updateFileProgress() {
    ProgressBar progress = (ProgressBar)findViewById(R.id.file_progress);
    if (manager.getProgressInUnits() < 0) {
        progress.setIndeterminate(true);
    } else {
        progress.setIndeterminate(false);
        progress.setMax((int)(manager.getSizeInUnits() * 10));
        progress.setProgress((int)(manager.getProgressInUnits() * 10));
    }
    TextView text = (TextView)findViewById(R.id.file_size);
    text.setText(getContext().getString(manager.getSizeUnit().progressString,
            manager.getProgressInUnits(), manager.getSizeInUnits()));
    }

}

ソース: http://code.google.com/p/sendtosd-android/source/browse/src/ru/gelin/android/sendtosd/progress/ProgressDialog.java?spec=svn0933973391a12bee4759a32f5776864c64022d71&r=0933973391a12bee4759a32f577462864

于 2012-09-13T16:46:11.510 に答える