将“.apk”文件复制到指定文件夹
Copying ".apk" file to specified folder
我正在尝试将已安装应用程序的 apk 从列表视图复制到某些指定的 folder.Copying apk 工作正常...但是每次我单击应用程序以复制其 apk ..."phone.apk" 被复制到具有 diff 包名称的目标文件夹。
这是文件复制的代码。
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.
您能够获取已安装应用循环列表作为包列表,但您没有比较您的包名称和进入循环的包名称。所以最后一个应用程序被保存了。请使用这个希望它会帮助你。注释部分是加法
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();
}
}
}
我正在尝试将已安装应用程序的 apk 从列表视图复制到某些指定的 folder.Copying apk 工作正常...但是每次我单击应用程序以复制其 apk ..."phone.apk" 被复制到具有 diff 包名称的目标文件夹。 这是文件复制的代码。
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.
您能够获取已安装应用循环列表作为包列表,但您没有比较您的包名称和进入循环的包名称。所以最后一个应用程序被保存了。请使用这个希望它会帮助你。注释部分是加法
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();
}
}
}