从列表中复制apk in sdcard

时间:2014-07-10 06:12:20

标签: java android android-listview

我已经检索了我的设备中安装的所有apk,并且我创建了一个列表,我可以在其中看到它们。点击一个项目,我创建了一个对话框。我会在正面按钮上复制我在sdcard中创建的文件夹中该位置的apk。到目前为止,我尝试过,我可以在toast中显示每个apk的app文件夹和位置,但我不明白如何复制我选择的apk。这是代码

.setPositiveButton("Copy apk", new DialogInterface.OnClickListener() {

               @Override
               public void onClick(DialogInterface dialogapk, int id)
               {
                   // TODO: Implement this method
                   final Intent mainIntent = new Intent(Intent.ACTION_MAIN, null);
                   mainIntent.addCategory(Intent.CATEGORY_LAUNCHER);
                   final List pkapplist = getActivity().getPackageManager().queryIntentActivities(mainIntent, 0);

                   for (Object o : pkapplist) {
                       ResolveInfo info = (ResolveInfo) o;
                       file = new File( info.activityInfo.applicationInfo.publicSourceDir);
                       Toast.makeText(getActivity(), "Boh "+file, Toast.LENGTH_SHORT).show();

                   }
                   try
                   {    
                       process = Runtime.getRuntime().exec("cp " + file + " " + customfolder);
                   }
                   catch (IOException e)
                   {

                   }

               }


        });

自定义文件夹是我以这种方式创建的文件夹

final File customfolder = new File(Environment.getExternalStorageDirectory().toString()+File.separator+"BackupApk");

实际上它创建了一个文件,而不是一个应用程序本身大小的文件夹..我不知道它到底在做什么!!谢谢。如果需要适配器让我知道

2 个答案:

答案 0 :(得分:0)

1)您是否在Manifest文件中声明了"android.permission.WRITE_EXTERNAL_STORAGE"权限? 2)Android系统命令中缺少cp命令:/system/bin/sh: cp: not found
3)创建customfolder时,您遗漏了customfolder.mkdirs()语句实际上在外部存储上创建此自定义目录
4)尝试关注solution

<强>更新
试图实现你的逻辑。 以下解决方案(取自前面提到的链接)证明自己是工作的(它实际上将APK文件备份到 / sdcard ):

FileInputStream inStream = new FileInputStream(file.getAbsolutePath());
FileOutputStream outStream = new FileOutputStream(backupDir.getAbsolutePath() +  File.separator + file.getName());
FileChannel inChannel = inStream.getChannel();
FileChannel outChannel = outStream.getChannel();
inChannel.transferTo(0, inChannel.size(), outChannel);
inStream.close();
outStream.close();

答案 1 :(得分:0)

File  Folder=new File(Environment.getExternalStorageDirectory(),"YourFolder");
        if(!Folder.exists()){
            Folder.mkdirs();
        }

这是检查n create

的代码