Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Android

Android में प्रोग्रामेटिक रूप से APK अनइंस्टॉल करें

यह ट्यूटोरियल दिखाता है कि Android में Intent.ACTION_DELETE का उपयोग करके किसी ऐप को प्रोग्रामेटिक रूप से कैसे अनइंस्टॉल किया जाए। यह दृष्टिकोण मानक सिस्टम अनइंस्टॉल डायलॉग को खोलता है, जिसके लिए पुष्टि के लिए उपयोगकर्ता इंटरैक्शन की आवश्यकता होती है।

महत्वपूर्ण सीमाएँ

  • उपयोगकर्ता पुष्टि आवश्यक: सिस्टम एक पुष्टिकरण डायलॉग दिखाता है; साइलेंट अनइंस्टॉल संभव नहीं है (सिस्टम ऐप्स/रूट को छोड़कर)।
  • स्वयं को अनइंस्टॉल नहीं कर सकता: एक ऐप सीधे खुद को अनइंस्टॉल नहीं कर सकता (वर्कअराउंड मौजूद हैं लेकिन जटिल हैं)।
  • पैकेज नाम ज्ञात होना चाहिए: आपको लक्ष्य ऐप का सटीक पैकेज नाम चाहिए।

चरण 1: प्रोजेक्ट बनाएं

Android Studio → New Project → Empty Activity → नाम: ApkUninstaller।

चरण 2: लेआउट (activity_main.xml)

अनइंस्टॉल Intent लॉन्च करने के लिए एक क्लिक करने योग्य TextView या Button।

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="https://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:gravity="center"
    android:padding="24dp">

    <TextView
        android:id="@+id/tvInstruction"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="नीचे टैप करके टेस्ट ऐप अनइंस्टॉल करें"
        android:textSize="16sp"
        android:layout_marginBottom="24dp"
        android:gravity="center" />

    <Button
        android:id="@+id/btnUninstall"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="टेस्ट ऐप अनइंस्टॉल करें"
        android:padding="16dp" />
</LinearLayout>

चरण 3: MainActivity.java

package com.example.apkuninstaller;

import android.content.Intent;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.Bundle;
import android.widget.Button;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;

public class MainActivity extends AppCompatActivity {

    // लक्ष्य पैकेज नाम - इसे उस ऐप के पैकेज नाम से बदलें जिसे आप अनइंस्टॉल करना चाहते हैं
    private static final String TARGET_PACKAGE = "com.example.testapp";

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

        Button btnUninstall = findViewById(R.id.btnUninstall);

        btnUninstall.setOnClickListener(v -> {
            // जांचें कि पैकेज इंस्टॉल है या नहीं
            if (isPackageInstalled(TARGET_PACKAGE)) {
                launchUninstallIntent(TARGET_PACKAGE);
            } else {
                Toast.makeText(this, "ऐप इंस्टॉल नहीं है: " + TARGET_PACKAGE, Toast.LENGTH_LONG).show();
            }
        });
    }

    private boolean isPackageInstalled(String packageName) {
        try {
            getPackageManager().getPackageInfo(packageName, 0);
            return true;
        } catch (PackageManager.NameNotFoundException e) {
            return false;
        }
    }

    private void launchUninstallIntent(String packageName) {
        Intent intent = new Intent(Intent.ACTION_DELETE);
        intent.setData(Uri.parse("package:" + packageName));
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

        // जांचें कि कोई गतिविधि Intent को संभाल सकती है या नहीं
        if (intent.resolveActivity(getPackageManager()) != null) {
            startActivity(intent);
        } else {
            Toast.makeText(this, "अनइंस्टॉल को संभालने में असमर्थ", Toast.LENGTH_SHORT).show();
        }
    }
}

चरण 4: AndroidManifest.xml

इस सुविधा के लिए Manifest में कोई विशेष अनुमति आवश्यक नहीं है।

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android"
    package="com.example.apkuninstaller">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">

        <activity
            android:name=".MainActivity"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
</manifest>

यह कैसे काम करता है

  1. Intent.ACTION_DELETE सिस्टम को पैकेज हटाने का अनुरोध करने के लिए कहता है।
  2. Uri.parse("package:" + packageName) लक्ष्य ऐप की पहचान करता है।
  3. सिस्टम पैकेज इंस्टॉलर Activity लॉन्च करता है जो पुष्टिकरण डायलॉग दिखाता है।
  4. उपयोगकर्ता पुष्टि करता है → सिस्टम ऐप को अनइंस्टॉल करता है।

उन्नत: अनइंस्टॉल परिणाम संभालना

अनइंस्टॉल परिणाम प्राप्त करने के लिए (उपयोगकर्ता ने पुष्टि की या रद्द किया), startActivityForResult() (निरस्त) या आधुनिक ActivityResultContracts का उपयोग करें:

// Modern Activity Result API (AndroidX)
private final ActivityResultLauncher uninstallLauncher = registerForActivityResult(
    new ActivityResultContracts.StartActivityForResult(),
    result -> {
        if (result.getResultCode() == RESULT_OK) {
            Toast.makeText(this, "ऐप अनइंस्टॉल किया गया", Toast.LENGTH_SHORT).show();
        } else {
            Toast.makeText(this, "अनइंस्टॉल रद्द किया गया", Toast.LENGTH_SHORT).show();
        }
    }
);

// उपयोग:
uninstallLauncher.launch(intent);

सामान्य उपयोग मामले

  • ऐप प्रबंधन टूल्स / क्लीनर ऐप्स
  • एंटरप्राइज़ MDM समाधान (डिवाइस स्वामी मोड के साथ)
  • टेस्ट ऑटोमेशन फ्रेमवर्क
  • ऐप अपडेट फ्लो (पुराने संस्करण को अनइंस्टॉल करें फिर नया इंस्टॉल करें)

सुरक्षा और गोपनीयता नोट्स

  • Android 11+ (API 30+) पर, पैकेज दृश्यता नियम लागू होते हैं। आपको Manifest में <queries> जोड़ने की आवश्यकता हो सकती है:
<queries>
    <package android:name="com.example.testapp" />
</queries>
  • हमेशा अनइंस्टॉल करने से पहले जांचें कि पैकेज मौजूद है या नहीं।
  • जहां संभव हो उपयोगकर्ता को सूचित करें कि कौन सा ऐप अनइंस्टॉल किया जाएगा।

निष्कर्ष

Intent.ACTION_DELETE का उपयोग करना उपयोगकर्ता हस्तक्षेप के साथ Android पर ऐप्स को अनइंस्टॉल करने का मानक, सुरक्षित तरीका है। यह उपयोगकर्ता सहमति और सिस्टम सुरक्षा का सम्मान करता है जबकि एक सरल प्रोग्रामेटिक इंटरफ़ेस प्रदान करता है।

  1. Android में BroadcastReceiver को प्रोग्रामेटिकली कैसे रजिस्टर करें? Android में BroadcastReceiver को प्रोग्रामेटिकली कैसे रजिस्टर करें?

    Android में प्रोग्रामेटिकली BroadcastReceiver रजिस्टर करना यह उदाहरण दर्शाता है कि Android ऐप में BroadcastReceiver को कोड के माध्यम से (प्रोग्रामेटिकली) कैसे रजिस्टर किया जाता है। यह दृष्टिकोण तब उपयोगी होता है जब आप रनटाइम पर डायनामिकली ब्रॉडकास्ट सुनना चाहते हैं, जैसे नेटवर्क कनेक्टिविटी परिवर्तन

  1. Android में ScrollView को प्रोग्रामेटिकली कैसे डिसेबल करें? Android में ScrollView को प्रोग्रामेटिकली कैसे डिसेबल करें?

    परिचय यह उदाहरण दर्शाता है कि Android में ScrollView को प्रोग्रामेटिक रूप से कैसे डिसेबल किया जाए। हम OnTouchListener का उपयोग करके टच इवेंट को इंटरसेप्ट करेंगे। चरण 1: नया प्रोजेक्ट बनाएं Android Studio में File → New Project के माध्यम से नया प्रोजेक्ट बनाएं। चरण 2: लेआउट XML में ScrollView res/l

  1. Android ऐप को प्रोग्रामेटिकली कैसे बंद करें? Android ऐप को प्रोग्रामेटिकली कैसे बंद करें?

    यह उदाहरण दर्शाता है कि Android ऐप को बटन क्लिक पर प्रोग्रामेटिकली कैसे बंद किया जाता है। चरण 1: नया प्रोजेक्ट बनाएं Android Studio में File → New Project। चरण 2: लेआउट XML res/layout/activity_main.xml: <?xml version=1.0 encoding=utf-8?> <RelativeLayout xmlns:android=https://schemas