如何在自己的App中调用Android系统自带的安装/卸载程序
2017-03-14 14:01
639 查看
AppUtils里面写了如何安装和卸载apk(这段代码出自这里:点击打开链接~),这里的安装和卸载调用的是Android本身的一个安装卸载,所以可能页面不会太优雅,并不符合商业App的期望,如果要做到更优雅的实现,就要用到静默安装/卸载,这个可以参照网上教程,我这里有一篇转载还是很不错的,大家可以参照一下:Android中实现静态的默认安装和卸载应用~
在MainActivity中是这样使用的,在这里,我以安装企鹅为例,先把企鹅的apk放到了我自定义好的一个文件夹中:
布局文件:
public class AppUtils { /* 安装apk */ public void installApk(Context context, String fileName) { Intent intent = new Intent(); intent.setAction(Intent.ACTION_VIEW); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.setDataAndType(Uri.parse("file://" + fileName), "application/vnd.android.package-archive"); context.startActivity(intent); } /* 卸载apk */ public void uninstallApk(Context context, String packageName) { // Uri uri = Uri.parse("package:" + packageName); Uri uri = Uri.fromParts("package", packageName, null); Intent intent = new Intent(Intent.ACTION_DELETE, uri); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);//一开始这句话是没有的,运行的时候就报了这个错误“ android.util.AndroidRuntimeException: Calling startActivity() from outside of an Activity context requires the FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want? ”,百度之后,得知,从一个Activity中要通过intent调出另一个Activity的话需要加上这个flag,所以各位切记,这句话不能漏 context.startActivity(intent); } }
在MainActivity中是这样使用的,在这里,我以安装企鹅为例,先把企鹅的apk放到了我自定义好的一个文件夹中:
public class MainActivity extends Activity { AppUtils appUtils = new AppUtils(); String fileName = ""; String packageName = ""; Button btnCopyTp; @BindView(R.id.btn_xz) Button btnXz; @BindView(R.id.btn_az) Button btnAz; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ButterKnife.bind(this); } @OnClick({R.id.btn_xz, R.id.btn_az) public void onClick(View view) { switch (view.getId()) { case R.id.btn_xz://卸载程序 String archiveFilePath = Environment.getExternalStorageDirectory() + "/MyFiles/Download/QQ_482.apk";//安装包路径 PackageManager pm = getPackageManager(); PackageInfo info = pm.getPackageArchiveInfo(archiveFilePath, PackageManager.GET_ACTIVITIES); if (info != null) { ApplicationInfo appInfo = info.applicationInfo; packageName = appInfo.packageName; //得到安装包名称 xz(context, packageName); } break; case R.id.btn_az://安装程序 fileName = Environment.getExternalStorageDirectory() + "/MyFiles/Download/QQ_482.apk"; File file = new File(fileName); if (file.exists()) { az(context, fileName); } break; } } public void az(Context context, String fileName) { appUtils.installApk(context, fileName); } public void xz(Context context, String packageName) { appUtils.uninstallApk(context, packageName); } }
布局文件:
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="com.honey.mytest.activity.MainActivity"> <Button android:text="通过我们的APP卸载其他应用" android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/btn_xz" android:layout_below="@+id/btn_copy_tp" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" android:layout_marginTop="56dp" /> <Button android:text="通过我们的APP安装其他应用" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/btn_xz" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" android:id="@+id/btn_az" /> </RelativeLayout>
相关文章推荐
- android 如何调用系统自带的程序安装器安装程序
- 调用Android installer 安装和卸载程序
- android 调用系统的卸载程序
- android技巧:把自己的app变成手机系统自带的app[/system/app]
- Android如何将第三方预装的AP安装在data/app下面,用户可以选择卸载,但是在用户恢复出厂设置后,会再次自动安装
- android 将自己的程序加入到系统调用列表
- android 调用系统安装程序
- Android如何将第三方预装的AP安装在data/app下面,用户可以选择卸载,但是在用户恢复出厂设置后,会再次自动安装
- Android Camera 使用小结。两种方法:一是调用系统camera app,二是自己写camera程序。
- 在android中如何调用系统的程序安装器来安装apk
- Android 模拟器上app程序的安装和卸载
- android 如何调用talk程序,集成到自己写的应用中
- Android 快速调用系统自带程序发送彩信实现
- android调用自带的程序安装
- 如何让自己的Android程序永不被系统kill
- 如何让自己的Android程序永不被系统kill
- Android安装和删除(卸载)应用软件程序(apk/app)
- android技巧:把自己的app变成手机系统自带的app[/system/app]
- 如何调用android系统自带的一些方法
- Android调用系统功能、apk安装卸载