Einzelne App sichern

A

AlexRock

Neues Mitglied
0
Hallo,
ich versuche derzeit, eine einzelne App aus einer ListView auszuwählen und diese zu sichern.
(Ich weiss nicht genau wie ich das Ausgewählte Element der ListView nutze)
Mein Ansatz dazu sieht folgendermassen aus:

Code:
    private ProgressDialog backup_app;

        backup_app = ProgressDialog.show(MainActivity.this,
                            "Sicherung", "", true, false);
                    Thread backup_app = new Thread(new BackupApp());
                    backup_app.start();
Aufgerufen wird:
Code:
        private static final String BACKUP_LOC = Environment
            .getExternalStorageDirectory() + "/InfoBackup/";
    private static final int SET_PROGRESS = 0x00;
    private static final int FINISH_PROGRESS = 0x01;
    private ProgressDialog backup_app;

    private List<App> mApps;
    private App info;

private class BackupApp implements Runnable {
        private static final int BUFFER = 1024;

        private File mDir = new File(BACKUP_LOC);
        private byte[] mData;

        public BackupApp() {
            mData = new byte[BUFFER];

            /* create dir if needed */
            File d = new File(BACKUP_LOC);
            if (!d.exists()) {
                d.mkdir();

                // then create this directory
                mDir.mkdir();

            } else {
                if (!mDir.exists())
                    mDir.mkdir();
            }
        }

        public void run() {
            BufferedInputStream mBuffIn;
            BufferedOutputStream mBuffOut;
            Message msg;
            int read = 0;
            info = (App) mAppsList.getSelectedItem();
            String source_file = info.getInstallDir() + info.getPackageName();
            String out_file = info.getTitle() + " " + info.getVersionName()
                    + ".apk";

            try {
                mBuffIn = new BufferedInputStream(new FileInputStream(
                        source_file));
                mBuffOut = new BufferedOutputStream(new FileOutputStream(
                        BACKUP_LOC + out_file));

                while ((read = mBuffIn.read(mData, 0, BUFFER)) != -1)
                    mBuffOut.write(mData, 0, read);

                mBuffOut.flush();
                mBuffIn.close();
                mBuffOut.close();

                msg = new Message();
                msg.what = SET_PROGRESS;
                msg.obj = info.getTitle() + " wird gesichert";
                BackupAppHandler.sendMessage(msg);

            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
            BackupAppHandler.sendEmptyMessage(FINISH_PROGRESS);
        }
    }

    private Handler BackupAppHandler = new Handler() {
        public void handleMessage(Message msg) {

            switch (msg.what) {
            case SET_PROGRESS:
                backup_app.setMessage((String) msg.obj);
                break;
            case FINISH_PROGRESS:
                backup_app.dismiss();
                AlertDialog.Builder finish = new AlertDialog.Builder(
                        MainActivity.this);
                finish.setTitle(R.string.finish_title);
                finish.setMessage(R.string.finish_message);
                finish.setCancelable(false);
                finish.setIcon(android.R.drawable.ic_menu_close_clear_cancel);
                finish.setPositiveButton(R.string.finish_button,
                        new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog, int id) {
                                dialog.dismiss();
                            }
                        });
                AlertDialog finish_alert = finish.create();
                finish_alert.show();
                break;
            }
        }
    };
Ich habe meinen Code, mit dem ich alle Apps sichern kann als Vorlage genommen. (Hier damit ihr einen Vergleich habt)

Code:
    private ProgressDialog backup_all;

                        backup_all = ProgressDialog.show(MainActivity.this,
                    "Sicherung der Anwendungen", "", true, false);
            Thread backup_all = new Thread(new BackupAll(mApps));
            backup_all.start();
Aufgerufen wird dort:

Code:
        private static final String BACKUP_LOC = Environment
            .getExternalStorageDirectory() + "/InfoBackup/";
    private static final int SET_PROGRESS = 0x00;
    private static final int FINISH_PROGRESS = 0x01;
    private ProgressDialog backup_all;

    private List<App> mApps;
    private App info;

private class BackupAll implements Runnable {
        private static final int BUFFER = 1024;

        private File mDir = new File(BACKUP_LOC);
        private byte[] mData;

        public BackupAll(List<App> data) {
            mApps = data;
            mData = new byte[BUFFER];

            /* create dir if needed */
            File d = new File(BACKUP_LOC);
            if (!d.exists()) {
                d.mkdir();

                // then create this directory
                mDir.mkdir();

            } else {
                if (!mDir.exists())
                    mDir.mkdir();
            }
        }

        public void run() {
            BufferedInputStream mBuffIn;
            BufferedOutputStream mBuffOut;
            Message msg;
            int len = mApps.size();
            int read = 0;

            for (int i = 0; i < len; i++) {
                info = mApps.get(i);
                String source_dir = info.getInstallDir();
                String out_file = info.getTitle() + " " + info.getVersionName()
                        + ".apk";
                try {
                    mBuffIn = new BufferedInputStream(new FileInputStream(
                            source_dir));
                    mBuffOut = new BufferedOutputStream(new FileOutputStream(
                            BACKUP_LOC + out_file));

                    while ((read = mBuffIn.read(mData, 0, BUFFER)) != -1)
                        mBuffOut.write(mData, 0, read);

                    mBuffOut.flush();
                    mBuffIn.close();
                    mBuffOut.close();

                    msg = new Message();
                    msg.what = SET_PROGRESS;
                    msg.obj = i + " von " + len + " Anwendungen gesichert";
                    BackupAllHandler.sendMessage(msg);

                } catch (FileNotFoundException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }

            BackupAllHandler.sendEmptyMessage(FINISH_PROGRESS);
        }
    }
 
Was genau ist deine Frage?
Wie man nach einem Item Click auf das dazugehörige Objekt kommt? Dafür kriegt man ja den index übergeben.

Oder war die Frage eine andere?
 
Ich klicke auf ein Element der ListView (Ist eine App im /data/) und diese eine möchte ich dann an meinen "BackupApp()" übergeben...
Ich weiss leider nicht, wie ich das daran übergeben kann und ob meine Methode "BackupApp" richtig geschrieben ist, damit sie nur dieses eine Objekt sichert
 
ohne viel zu überlegen würd ich jetzt mal sowas machen

mApps = new ArrayList<App>();
mApps.add(the_one_app_to_backup);

Thread backup_all = new Thread(new BackupAll(mApps));
backup_all.start();

somit übergibst du ihm halt eine arraylist mit nur einem element. wenns mit allen geht, wirds mit einem auch gehn.
 
Hallo Swordi,
Und was muss in das mApps.add() rein? Woher weiss der nun, welche ich ausgewählt habe? Noch mApps.getId oder sowas?
 
Habs schon rausgefunden
Code:
backup_app = ProgressDialog.show(MainActivity.this,
                            "Sicherung", "", true, false);
                    mApps = new ArrayList<App>();
                    mApps.add(app);

                    Thread backup_all = new Thread(new BackupApp(mApps));
                    backup_all.start();
 
der code ist ja von dir oder??
da solltest du ja schon wissen was er tut :)

das scheint mir aber nicht ganz selbst geschrieben.
 
Hallo Swordi,
ja code ist von mir und nem Freund, der momentan (wie sollte es auch anders sein in den Ferien) in Urlaub ist (er ist schon bewanderter in Java)...

Aber nun klappt es ja

Code:
backup_app = ProgressDialog.show(MainActivity.this,                             "Sicherung", "", true, false);                     mApps = new ArrayList<App>();
mApps.add(app);
Thread backup_all = new Thread(new BackupApp(mApps));
backup_all.start();
 

Ähnliche Themen

M
Antworten
3
Aufrufe
169
moin
M
Manny87
  • Manny87
Antworten
11
Aufrufe
166
swa00
swa00
R
  • Robby1950
2
Antworten
23
Aufrufe
1.022
Robby1950
R
Zurück
Oben Unten