android 软件卸载 代码

package scl.uninstallapp;

import java.util.ArrayList;
import java.util.List;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.Intent;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageInfo;
import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;

public class MainActivity extends Activity {
	private ArrayList<AppInfo> list;
	private ListView listView;
	protected AdapterApp adapterApp;
	
	@Override
	protected void onRestart() {
		System.out.println("onRestart");
		adapterApp.notifyDataSetChanged();
		super.onRestart();
	}
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        list = getListApp();//获取非系统安装的软件信息
        listView = (ListView) findViewById(R.id.listView1);
        adapterApp = new AdapterApp(MainActivity.this,list);
        listView.setDividerHeight(2);
       
        if(list !=null)
        {
        	listView.setOnItemClickListener(new OnItemClickListener() {

				public void onItemClick(AdapterView<?> parent, View view,
						int position, long id) {
					AppInfo app=list.get(position);
//					System.out.println(app.getAppName()+"--"+app.getPackageName()+"--"+app.getVersionName()+"--"+app.getVersionCode());
					String message = app.getAppName()+","+app.getPackageName()+","+app.getVersionName()+","+app.getVersionCode();
					new AlertDialog.Builder(MainActivity.this).setTitle("软件信息")
					.setMessage(message)
					.setPositiveButton("OK", null).create().show();
				}
			});
        	
        	listView.setAdapter(adapterApp);
        }
    }

	private ArrayList<AppInfo> getListApp() {
		ArrayList<AppInfo> arrayList = new ArrayList<AppInfo>();
		List<PackageInfo> listPackages = getPackageManager()
				.getInstalledPackages(0);
		for (PackageInfo packageInfo : listPackages) {
//			System.out.println(packageInfo.applicationInfo.loadLabel(getPackageManager()).toString()
//					+" / "+packageInfo.applicationInfo.flags
//					+" / "+ApplicationInfo.FLAG_SYSTEM);
//			System.out.println((packageInfo.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM));
			
			if ((packageInfo.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) <= 0) {

				AppInfo appInfo = new AppInfo(packageInfo.applicationInfo
						.loadLabel(getPackageManager()).toString(),
						packageInfo.packageName, packageInfo.versionName,
						packageInfo.versionCode,
						packageInfo.applicationInfo
								.loadIcon(getPackageManager()));

				arrayList.add(appInfo);
			}
		}
		return arrayList;
	}

	@Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }
}

class AdapterApp extends BaseAdapter{
	private LayoutInflater mlayoutInflater;
	private List<AppInfo> list;
	private Context context;
	public AdapterApp(Context context, ArrayList<AppInfo> list) {
		mlayoutInflater = LayoutInflater.from(context);
		this.list = list;
		this.context = context;
	}

	public int getCount() {
		return list.size();
	}

	public Object getItem(int position) {
		return list.get(position);
	}

	public long getItemId(int position) {
		return position;
	}

	public View getView(int position, View convertView, ViewGroup parent) {
		
		ViewHolder holder = null;
		final AppInfo appUnit=list.get(position);
		if(convertView == null || convertView.getTag() == null){
			convertView = mlayoutInflater.inflate(R.layout.list_item01, null);
			holder = new ViewHolder(convertView);
			convertView.setTag(holder);
		}else{
			holder = (ViewHolder) convertView.getTag();
		}
		holder.appIcon.setImageDrawable(appUnit.getAppIcon());
		holder.appName.setText(appUnit.getAppName());
//		System.out.println("------"+appUnit.getPackageName());
		holder.btnUninstall.setOnClickListener(new View.OnClickListener() {
			
			public void onClick(View v) {
//				System.out.println("package:"+appUnit.getPackageName());
				Uri packeageUri = Uri.parse("package:"+appUnit.getPackageName());
				Intent intent = new Intent(Intent.ACTION_DEFAULT, packeageUri);
				context.startActivity(intent);
				
				list.remove(appUnit);
				
			}
			
		});
		return convertView;
	}
	private class ViewHolder{
		ImageView appIcon;
		TextView appName;
		Button btnUninstall;

		public ViewHolder(View view) {
			this.appIcon = (ImageView) view.findViewById(R.id.app_icon);
			this.appName = (TextView) view.findViewById(R.id.app_name);
			this.btnUninstall = (Button) view.findViewById(R.id.btn_uninstall);
		}
	}
}

class AppInfo{
	private String appName;
	private String packageName;
	private String versionName;
	private int versionCode;
	private Drawable appIcon;
	
	public AppInfo() {
		super();
	}

	public AppInfo(String appName, String packageName, String versionName,
			int versionCode, Drawable appIcon) {
		super();
		this.appName = appName;
		this.packageName = packageName;
		this.versionName = versionName;
		this.versionCode = versionCode;
		this.appIcon = appIcon;
	}

	public String getAppName() {
		return appName;
	}

	public void setAppName(String appName) {
		this.appName = appName;
	}

	public String getPackageName() {
		return packageName;
	}

	public void setPackageName(String packageName) {
		this.packageName = packageName;
	}

	public String getVersionName() {
		return versionName;
	}

	public void setVersionName(String versionName) {
		this.versionName = versionName;
	}

	public int getVersionCode() {
		return versionCode;
	}

	public void setVersionCode(int versionCode) {
		this.versionCode = versionCode;
	}

	public Drawable getAppIcon() {
		return appIcon;
	}

	public void setAppIcon(Drawable appIcon) {
		this.appIcon = appIcon;
	}
	
}


activity_man.xml 加一个listview

<ListView
        android:id="@+id/listView1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >
    </ListView>


list_item01.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:descendantFocusability="blocksDescendants" >

    <Button
        android:id="@+id/btn_uninstall"
         android:layout_alignParentRight="true"
        android:layout_width="wrap_content"
        android:layout_height="50dp"
        android:focusable="false"
        android:text="@string/btn_uninstall" />

<ImageView
    android:id="@+id/app_icon"
    android:layout_width="50dp"
    android:layout_height="50dp"
    android:layout_alignBottom="@+id/app_name"
    android:layout_alignParentLeft="true" />

    <TextView
        android:id="@+id/app_name"
        android:layout_width="fill_parent"
        android:layout_height="50dp"
        android:layout_alignParentTop="true"
        android:layout_toLeftOf="@+id/btn_uninstall"
        android:layout_toRightOf="@+id/app_icon" />

</RelativeLayout>


Android 12及以后版本中,系统默认并不允许应用直接通过代码卸载其他APK文件,这是出于安全性和隐私保护的考虑。为了防止恶意软件滥用权限,用户通常需要手动操作或者通过系统的管理工具来进行。 然而,如果你拥有root权限或者是在特定的应用场景(如测试环境),可以尝试使用一些第三方库或者系统的命令行工具,例如`adb`(Android Debug Bridge)。下面是一个基本的示例,展示了如何使用ADB来卸载APK: ```java // 引入RuntimePermissionManager库 (仅限于有相应权限) import android.content.pm.PackageManager; import android.os.Process; // 获取安装包信息并检查是否有权限 PackageManager pm = getApplicationContext().getPackageManager(); List<PackageInfo> packages = pm.getInstalledPackages(PackageManager.GET_UNINSTALLED_PACKAGES); for (PackageInfo packageInfo : packages) { if (packageInfo.packageName.equals("com.example.app")) { // 替换为你想要卸载的包名 try { // 请求运行权限(仅在API >= 23) int permissionCheck = ContextCompat.checkSelfPermission(this, Manifest.permission.DELETE_PACKAGES); if (permissionCheck != PackageManager.PERMISSION_GRANTED) { ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.DELETE_PACKAGES}, REQUEST_CODE_PERMISSIONS); return; } // 使用adb命令卸载 Runtime.getRuntime().exec(new String[]{"su", "-c", "pm uninstall " + packageInfo.packageName}); break; // 只删除第一个找到的包 } catch (Exception e) { Log.e("App", "Failed to uninstall app: ", e); } } } // 检查权限请求结果 @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { switch (requestCode) { case REQUEST_CODE_PERMISSIONS: if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { // 如果权限被授予,继续卸载过程... } else { Toast.makeText(this, "权限拒绝,无法卸载", Toast.LENGTH_SHORT).show(); } break; } } ``` 请注意,这只是一个理论上的示例,并不是所有情况都能成功,实际使用时还需谨慎处理,因为直接卸载可能不符合Google Play商店的规定。另外,用户可能会看到相关的权限提示,如果用户不允许,程序将无法执行卸载操作。在生产环境中,这种需求通常是不必要的,建议提供更友好的用户体验,比如向用户推荐他们从设置中手动卸载
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值