在Android中以编程方式将所有安装的APK文件备份到sdcard中

夏瓦尔·卡拉瓦迪亚(Harshal Kalavadiya)

我想在我的SD卡中备份所有安装的应用程序,所以我在下面的代码中编写

public class MainActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    final Intent mainIntent = new Intent(Intent.ACTION_MAIN, null);
    mainIntent.addCategory(Intent.CATEGORY_LAUNCHER);
    final List pkgAppsList = getPackageManager().queryIntentActivities( mainIntent, 0);
    for (Object object : pkgAppsList) {
        ResolveInfo info = (ResolveInfo) object;
        File file =new File( info.activityInfo.applicationInfo.publicSourceDir);
        InputStream myInput;
        System.out.println("SDSD "+file.toString());

        String sdpath = Environment.getExternalStorageDirectory().getPath();
        try {
            File exist=new File(Environment.getExternalStorageState()+file.toString());
            System.out.println("1 "+ exist.exists());
            // Set the output folder on the Scard
            File directory = new File(sdpath + "/Back");
            // Create the folder if it doesn't exist:
            if (!directory.exists()) {
            directory.mkdirs();
            }
            // Set the output file stream up:
            myInput = new FileInputStream(Environment.getExternalStorageState()+ file.toString());
            OutputStream myOutput = new FileOutputStream(directory.getPath()+ file.toString());
            // Transfer bytes from the input file to the output file
            byte[] buffer = new byte[1024];
            int length;
            while ((length = myInput.read(buffer)) > 0) {
            myOutput.write(buffer, 0, length);
            }
            // Close and clear the streams
            myOutput.flush();
            myOutput.close();
            myInput.close();
            Toast.makeText(MainActivity.this, "Backup Done Succesfully!", Toast.LENGTH_LONG)
            .show();
            } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            }
       }
}

}

当我运行上面的代码时,它给我的消息像

01-11 09:52:35.296: W/System.err(966): java.io.FileNotFoundException: /mounted/data/app/com.example.gridwithcheckbox-1.apk (No such file or directory)
01-11 09:52:35.315: W/System.err(966):  at org.apache.harmony.luni.platform.OSFileSystem.open(Native Method)
01-11 09:52:35.315: W/System.err(966):  at dalvik.system.BlockGuard$WrappedFileSystem.open(BlockGuard.java:232)
01-11 09:52:35.315: W/System.err(966):  at java.io.FileInputStream.<init>(FileInputStream.java:80)
01-11 09:52:35.315: W/System.err(966):  at java.io.FileInputStream.<init>(FileInputStream.java:132)
01-11 09:52:35.315: W/System.err(966):  at com.example.backupdemo.MainActivity.onCreate(MainActivity.java:46)
01-11 09:52:35.315: W/System.err(966):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
01-11 09:52:35.315: W/System.err(966):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611)
01-11 09:52:35.315: W/System.err(966):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
01-11 09:52:35.315: W/System.err(966):  at android.app.ActivityThread.access$1500(ActivityThread.java:117)
01-11 09:52:35.315: W/System.err(966):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
01-11 09:52:35.315: W/System.err(966):  at android.os.Handler.dispatchMessage(Handler.java:99)
01-11 09:52:35.315: W/System.err(966):  at android.os.Looper.loop(Looper.java:123) 
01-11 09:52:35.315: W/System.err(966):  at android.app.ActivityThread.main(ActivityThread.java:3683)
01-11 09:52:35.315: W/System.err(966):  at java.lang.reflect.Method.invokeNative(Native Method)
01-11 09:52:35.315: W/System.err(966):  at java.lang.reflect.Method.invoke(Method.java:507)
01-11 09:52:35.315: W/System.err(966):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
01-11 09:52:35.315: W/System.err(966):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
01-11 09:52:35.315: W/System.err(966):  at dalvik.system.NativeStart.main(Native Method)

而且我还提到了清单文件的许可

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

所以有什么主意我该怎么解决呢?

使用塔米伦代码,我得到像下面的logcat

01-11 10:46:19.685: V/file--(14637):  com.example.tabpager-2.apk----TabPAger
01-11 10:46:19.685: D/file_name--(14637):  TabPAger
01-11 10:46:19.685: I/System.out(14637): No such file or directory
01-11 10:46:19.685: V/file--(14637):  it.anddev.tutorial-1.apk----KeyboardWidgetTutorial
01-11 10:46:19.695: D/file_name--(14637):  KeyboardWidgetTutorial
01-11 10:46:19.695: I/System.out(14637): No such file or directory
01-11 10:46:19.695: V/file--(14637):  com.example.crudopration-2.apk----CrudOpration
01-11 10:46:19.695: D/file_name--(14637):  CrudOpration
01-11 10:46:19.695: I/System.out(14637): No such file or directory
01-11 10:46:19.705: V/file--(14637):  net.leolink.android.simpleinfinitecarousel- 1.apk----SimpleInfiniteCarousel
01-11 10:46:19.705: D/file_name--(14637):  SimpleInfiniteCarousel
哈里哈兰

试试这个..

final Intent mainIntent = new Intent(Intent.ACTION_MAIN, null);
        mainIntent.addCategory(Intent.CATEGORY_LAUNCHER);
        final List pkgAppsList = getPackageManager().queryIntentActivities( mainIntent, 0);
        int z = 0;
        for (Object object : pkgAppsList) {

            ResolveInfo info = (ResolveInfo) object;

            File f1 =new File( info.activityInfo.applicationInfo.publicSourceDir);

            Log.v("file--", " "+f1.getName().toString()+"----"+info.loadLabel(getPackageManager()));
                try{

                    String file_name = info.loadLabel(getPackageManager()).toString();
                    Log.d("file_name--", " "+file_name);

                   // File f2 = new File(Environment.getExternalStorageDirectory().toString()+"/Folder/"+file_name+".apk");
                   // f2.createNewFile();

                    File f2 = new File(Environment.getExternalStorageDirectory().toString()+"/Folder");   
                    f2.mkdirs();            
                    f2 = new File(f2.getPath()+"/"+file_name+".apk");
                    f2.createNewFile();

                    InputStream in = new FileInputStream(f1);

                    OutputStream out = new FileOutputStream(f2);

                    byte[] buf = new byte[1024];
                    int len;
                    while ((len = in.read(buf)) > 0){
                        out.write(buf, 0, len);
                    }
                    in.close();
                    out.close();
                    System.out.println("File copied.");
                }
                catch(FileNotFoundException ex){
                    System.out.println(ex.getMessage() + " in the specified directory.");
                }
                catch(IOException e){
                    System.out.println(e.getMessage());      
                }
        }

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在Android中以编程方式将所有安装的APK文件备份到sdcard中

来自分类Dev

以编程方式将/system/app/*.apk复制到sdcard

来自分类Dev

以编程方式从Android中的R文件获取所有图像

来自分类Dev

以编程方式将apk从本地资产目录安装/卸载到android studio中的真实设备

来自分类Dev

如何以编程方式从android中的sdcard查找mp3文件

来自分类Dev

如何在Flutter中以编程方式从本地存储安装.apk文件?

来自分类Dev

如何以编程方式修改现有apk中Assets文件夹中的数据?

来自分类Dev

以编程方式将CA Trust证书导入到现有密钥库文件中,而无需使用keytool

来自分类Dev

以编程方式将Android设备上SDCard上的本地文件夹与Google Drive同步

来自分类Dev

将数据库文件复制到android中的sdcard

来自分类Dev

以编程方式安装apk

来自分类Dev

以编程方式安装APK

来自分类常见问题

如何在Django中以编程方式批准所有已安装的应用程序权限

来自分类Dev

如何将Picasa 3中的所有照片备份到Amazon S3?

来自分类Dev

递归地将所有.php文件复制/备份到.php.bak文件,并将其保留在当前路径中

来自分类Dev

如何捕捉 sdcard 中的所有歌曲以及音乐等 sdcard 文件夹

来自分类Dev

以编程方式递归列出Eclipse工作区中的所有文件

来自分类Dev

以编程方式递归列出Eclipse工作区中的所有文件

来自分类Dev

如何以编程方式删除Cloud Storage Bucket中文件夹中的所有内容

来自分类Dev

将所有输出重定向到PowerShell中的文件

来自分类Dev

从市场以外的网站上以编程方式在Android设备上下载,安装和删除.apk文件

来自分类Dev

Qt / C ++ / Android-如何以编程方式安装.APK文件?

来自分类Dev

如何将符号链接放置到通过Chocolatey安装的所有可执行文件的特定目录中?

来自分类Dev

在所有android版本中以编程方式打开和关闭GPS

来自分类Dev

如何在Android中以编程方式关闭所有正在运行的应用程序?

来自分类Dev

如何以编程方式重置android应用中的所有数据?

来自分类Dev

在android中安装后以编程方式启动应用程序

来自分类Dev

如何通过SU [root] Eclipse Android将数据中的文件夹从数据复制到Sdcard

来自分类Dev

一次单击如何安装sdcard中存在的apk?

Related 相关文章

  1. 1

    在Android中以编程方式将所有安装的APK文件备份到sdcard中

  2. 2

    以编程方式将/system/app/*.apk复制到sdcard

  3. 3

    以编程方式从Android中的R文件获取所有图像

  4. 4

    以编程方式将apk从本地资产目录安装/卸载到android studio中的真实设备

  5. 5

    如何以编程方式从android中的sdcard查找mp3文件

  6. 6

    如何在Flutter中以编程方式从本地存储安装.apk文件?

  7. 7

    如何以编程方式修改现有apk中Assets文件夹中的数据?

  8. 8

    以编程方式将CA Trust证书导入到现有密钥库文件中,而无需使用keytool

  9. 9

    以编程方式将Android设备上SDCard上的本地文件夹与Google Drive同步

  10. 10

    将数据库文件复制到android中的sdcard

  11. 11

    以编程方式安装apk

  12. 12

    以编程方式安装APK

  13. 13

    如何在Django中以编程方式批准所有已安装的应用程序权限

  14. 14

    如何将Picasa 3中的所有照片备份到Amazon S3?

  15. 15

    递归地将所有.php文件复制/备份到.php.bak文件,并将其保留在当前路径中

  16. 16

    如何捕捉 sdcard 中的所有歌曲以及音乐等 sdcard 文件夹

  17. 17

    以编程方式递归列出Eclipse工作区中的所有文件

  18. 18

    以编程方式递归列出Eclipse工作区中的所有文件

  19. 19

    如何以编程方式删除Cloud Storage Bucket中文件夹中的所有内容

  20. 20

    将所有输出重定向到PowerShell中的文件

  21. 21

    从市场以外的网站上以编程方式在Android设备上下载,安装和删除.apk文件

  22. 22

    Qt / C ++ / Android-如何以编程方式安装.APK文件?

  23. 23

    如何将符号链接放置到通过Chocolatey安装的所有可执行文件的特定目录中?

  24. 24

    在所有android版本中以编程方式打开和关闭GPS

  25. 25

    如何在Android中以编程方式关闭所有正在运行的应用程序?

  26. 26

    如何以编程方式重置android应用中的所有数据?

  27. 27

    在android中安装后以编程方式启动应用程序

  28. 28

    如何通过SU [root] Eclipse Android将数据中的文件夹从数据复制到Sdcard

  29. 29

    一次单击如何安装sdcard中存在的apk?

热门标签

归档