1. Nimm jetzt an unserem 2. ADVENT-Gewinnspiel teil - Alle Informationen findest Du hier!

Einzelne App sichern

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von AlexRock, 01.08.2011.

  1. AlexRock, 01.08.2011 #1
    AlexRock

    AlexRock Threadstarter Junior Mitglied

    Beiträge:
    38
    Erhaltene Danke:
    0
    Registriert seit:
    02.02.2010
    Phone:
    HTC Hero
    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);
            }
        }
    
     
  2. the_alien, 01.08.2011 #2
    the_alien

    the_alien Android-Lexikon

    Beiträge:
    1,559
    Erhaltene Danke:
    184
    Registriert seit:
    04.05.2009
    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?
     
  3. AlexRock, 01.08.2011 #3
    AlexRock

    AlexRock Threadstarter Junior Mitglied

    Beiträge:
    38
    Erhaltene Danke:
    0
    Registriert seit:
    02.02.2010
    Phone:
    HTC Hero
    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
     
  4. swordi, 01.08.2011 #4
    swordi

    swordi Gewerbliches Mitglied

    Beiträge:
    3,389
    Erhaltene Danke:
    441
    Registriert seit:
    09.05.2009
    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.
     
  5. AlexRock, 01.08.2011 #5
    AlexRock

    AlexRock Threadstarter Junior Mitglied

    Beiträge:
    38
    Erhaltene Danke:
    0
    Registriert seit:
    02.02.2010
    Phone:
    HTC Hero
    Hallo Swordi,
    Und was muss in das mApps.add() rein? Woher weiss der nun, welche ich ausgewählt habe? Noch mApps.getId oder sowas?
     
  6. AlexRock, 01.08.2011 #6
    AlexRock

    AlexRock Threadstarter Junior Mitglied

    Beiträge:
    38
    Erhaltene Danke:
    0
    Registriert seit:
    02.02.2010
    Phone:
    HTC Hero
    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();
    
     
  7. swordi, 01.08.2011 #7
    swordi

    swordi Gewerbliches Mitglied

    Beiträge:
    3,389
    Erhaltene Danke:
    441
    Registriert seit:
    09.05.2009
    der code ist ja von dir oder??
    da solltest du ja schon wissen was er tut :)

    das scheint mir aber nicht ganz selbst geschrieben.
     
  8. AlexRock, 01.08.2011 #8
    AlexRock

    AlexRock Threadstarter Junior Mitglied

    Beiträge:
    38
    Erhaltene Danke:
    0
    Registriert seit:
    02.02.2010
    Phone:
    HTC Hero
    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();
    
     

Diese Seite empfehlen