악성 앱 보안 솔루션 적용하면서 설치된 악성앱을 삭제해야되는 상황이 생겼음. 여기서는 삭제하고 삭제완료시 이벤트 받는것만 다룸.
설치하고 설치완료시 이벤트도 받을 수 있지만 여기서는 안다룸. ^^
[필요 퍼미션]
<uses-permission android:name="android.permission.REQUEST_DELETE_PACKAGES" />
[설치된 앱 삭제]
PackageManager pm = this.getPackageManager();
try {
Intent deleteIntent = pm.getLaunchIntentForPackage("삭제할 패키지 명");
if (deleteIntent != null) {
Intent intent = new Intent(Intent.ACTION_DELETE);
intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
intent.setData(Uri.parse(String.format("package:%s", "삭제할 패키지 명")));
startActivity(intent);
}
} catch (ActivityNotFoundException error) {
DLog.e(new Exception(), error.getMessage());
}
[삭제가 완료 시점 이벤트로 받기]
public class AppRemoveEventReceiver extends BroadcastReceiver {
public String removePackageName = "";
@Override
public void onReceive(Context context, Intent intent) {
removePackageName = intent.getData().getSchemeSpecificPart();
String action = intent.getAction();
if(action.equals(Intent.ACTION_PACKAGE_ADDED)) {
Log.d("", "[snowdeer] Package ADDED : " + removePackageName);
} else if(action.equals(Intent.ACTION_PACKAGE_REMOVED)) {
Log.d("", "[snowdeer] Package REMOVED : " + removePackageName);
}
}
}
///////////////////////////////////////////////////////////////////////////////////
// Activity 에서 처리
//변수 선언
private AppRemoveEventReceiver mPackageRemoveEventReceiver;
@Override
protected void onDestroy() {
super.onDestroy();
// 해제
if (mPackageRemoveEventReceiver != null) {
unregisterReceiver(mPackageRemoveEventReceiver);
}
}
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 악성프로그램이 여러개 일 경우 삭제된 패키지 리스트 갱신용
mPackageRemoveEventReceiver = new AppRemoveEventReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
super.onReceive(context, inten);
/*
AppRemoveEventReceiver 클래스의 removePackageName 에 삭제된 앱 패키지명이 담김.
removePackageName 가지고 삭제 유무 판단해서 로직 추가하면됨.
*/
}
}
};
//Receiver 등록
registerPackageEventReceiver();
}
// onCreate 에서 호출
private void registerPackageEventReceiver() {
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(Intent.ACTION_PACKAGE_REMOVED);
intentFilter.addDataScheme("package");
registerReceiver(mPackageRemoveEventReceiver, intentFilter);
}
'Android(Java)' 카테고리의 다른 글
[Java] 앱 실행시 첫화면 흰색 또는 검정색 화면 안보이고 스플래시 바로 보이게 하기 (0) | 2024.08.23 |
---|---|
[Java] 클립보드 복사 / 붙여넣기 (0) | 2024.08.23 |
[Java] 설치된 앱 패키지 명으로 이름/아이콘 가져오기 (0) | 2024.07.23 |
[Java] ImageView Zoom In/Out (0) | 2024.07.03 |
[Java] App Link / Deep Link Sceme 데이터 처리 (0) | 2024.06.18 |