2015-12-10 31 views
0

我试图从已安装的应用程序从列表视图复制到某些指定的文件夹apk.Copying apk工作正常...但每次我点击应用程序来复制它的apk .. 。“phone.apk”通过diff包名称复制到目标文件夹。 这里是文件复制的代码。将“.apk”文件复制到指定的文件夹

   public class MainActivity extends ListActivity { 
PackageManager packageManager; 
List<ApplicationInfo> applist; 
Listadapter listadapter; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    packageManager = getPackageManager(); 

    new LoadApplications().execute(); 

} 

@Override 
protected void onListItemClick(ListView l, View v, final int position, long id) { 
    super.onListItemClick(l, v, position, id); 

    AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(this); 
    dialogBuilder.setTitle("Choose option") 
      .setItems(R.array.options, new DialogInterface.OnClickListener() { 
       @Override 
       public void onClick(DialogInterface dialog, int which) { 
        switch (which) { 

         case 0: 
          ApplicationInfo app3 = applist.get(position); 
          packageName=app3.packageName; 
          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 f1 = new File(info.activityInfo.applicationInfo.publicSourceDir); 
           try{       
            File f2 = new File(Environment.getExternalStorageDirectory().toString()+"/Rahul"); 
            f2.mkdirs(); 
            f2 = new File(f2.getPath()+"/"+packageName + ".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(); 
            Toast.makeText(MainActivity.this,"Copied",Toast.LENGTH_LONG).show(); 
           } 
           catch(FileNotFoundException ex){ 
            System.out.println(ex.getMessage() + " in the specified directory."); 
           } 
           catch(IOException e){ 
            System.out.println(e.getMessage()); 
           } 
           break; 
          } 
        } 
       } 
      }); 
    dialogBuilder.setCancelable(true) 
      .show(); 

} 

private List<ApplicationInfo> checkForLaunchIntent(List<ApplicationInfo> list) { 
    ArrayList<ApplicationInfo> applist = new ArrayList<>(); 

    for (ApplicationInfo info : list) { 
     try { 
      if (packageManager.getLaunchIntentForPackage(info.packageName) != null) { 
       applist.add(info); 
      } 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 
    return applist; 
} 

private class LoadApplications extends AsyncTask<Void, Void, Void> { 
    private ProgressDialog progress = null; 

    @Override 
    protected Void doInBackground(Void... params) { 
     applist = checkForLaunchIntent(packageManager.getInstalledApplications(PackageManager.GET_META_DATA)); 

     listadapter = new Listadapter(MainActivity.this, R.layout.list_item, applist); 

     return null; 
    } 

    @Override 
    protected void onPostExecute(Void aVoid) { 
     setListAdapter(listadapter); 
     progress.dismiss(); 
     super.onPostExecute(aVoid); 

    } 

    @Override 
    protected void onPreExecute() { 
     progress = ProgressDialog.show(MainActivity.this, null, "loading apps info,,,"); 
     super.onPreExecute(); 
    } 

} 
} 

This is the ss of the destination folder in which file gets copied.

回答

0

你能得到安装的应用程序环路的包列表清单,但你并没有比较你的包名称和包装产品,其在循环来的名字。所以最后的应用程序被保存了。请使用这个希望它会帮助你。评论部分是增加

public class MainActivity extends ListActivity { 
    PackageManager packageManager; 
    List<ApplicationInfo> applist; 
    Listadapter listadapter; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     packageManager = getPackageManager(); 

     new LoadApplications().execute(); 

    } 

    @Override 
    protected void onListItemClick(ListView l, View v, final int position, 
      long id) { 
     super.onListItemClick(l, v, position, id); 

     AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(this); 
     dialogBuilder.setTitle("Choose option").setItems(R.array.options, 
       new DialogInterface.OnClickListener() { 
        @Override 
        public void onClick(DialogInterface dialog, int which) { 
         switch (which) { 

         case 0: 
          ApplicationInfo app3 = applist.get(position); 

          // this is the pakage name of tha app you clicked 
          packageName = app3.packageName; 
          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; 
           // check whther the app clicked and the app in 
           // the loop has same package name 
           if (info.activityInfo.packageName 
             .equals(packageName)) { 
            File f1 = new File(
              info.activityInfo.applicationInfo.publicSourceDir); 
            try { 
             File f2 = new File(Environment 
               .getExternalStorageDirectory() 
               .toString() 
               + "/Rahul"); 
             f2.mkdirs(); 
             f2 = new File(f2.getPath() + "/" 
               + packageName + ".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(); 
             Toast.makeText(MainActivity.this, 
               "Copied", Toast.LENGTH_LONG) 
               .show(); 
            } catch (FileNotFoundException ex) { 
             System.out.println(ex.getMessage() 
               + " in the specified directory."); 
            } catch (IOException e) { 
             System.out.println(e.getMessage()); 
            } 
            break; 
           } 
          } 
         } 
        } 
       }); 
     dialogBuilder.setCancelable(true).show(); 

    } 

    private List<ApplicationInfo> checkForLaunchIntent(List<ApplicationInfo> list) { 
    ArrayList<ApplicationInfo> applist = new ArrayList<>(); 

    for (ApplicationInfo info : list) { 
     try { 
      if (packageManager.getLaunchIntentForPackage(info.packageName) != null) { 
       applist.add(info); 
      } 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 
    return applist; 
} 

    private class LoadApplications extends AsyncTask<Void, Void, Void> { 
     private ProgressDialog progress = null; 

     @Override 
     protected Void doInBackground(Void... params) { 
      applist = checkForLaunchIntent(packageManager 
        .getInstalledApplications(PackageManager.GET_META_DATA)); 

      listadapter = new Listadapter(MainActivity.this, 
        R.layout.list_item, applist); 

      return null; 
     } 

     @Override 
     protected void onPostExecute(Void aVoid) { 
      setListAdapter(listadapter); 
      progress.dismiss(); 
      super.onPostExecute(aVoid); 

     } 

     @Override 
     protected void onPreExecute() { 
      progress = ProgressDialog.show(MainActivity.this, null, 
        "loading apps info,,,"); 
      super.onPreExecute(); 
     } 

    } 
} 
+0

如u可以在图像看到包名似乎是在目标文件夹正确的,但对easch和大家 – Rahul

+0

安装contacts.apk被安装......如果妳需要我可以张贴完整如果dat帮助 – Rahul

+0

是的,这将是很好 –

相关问题