অ্যান্ড্রয়েড অ্যাপ্লিকেশন ব্যবহারকারীর ডেটা সাফ করুন


108

অ্যাপ্লিকেশন ডেটা সাফ করতে অ্যাডবি শেল ব্যবহার করা

adb shell pm clear com.android.browser

কিন্তু অ্যাপ্লিকেশন থেকে এই কমান্ড কার্যকর করার সময়

String deleteCmd = "pm clear com.android.browser";      
        Runtime runtime = Runtime.getRuntime();
        try {
            runtime.exec(deleteCmd);
        } catch (IOException e) {
            e.printStackTrace();                
        }

সমস্যা:

এটি ব্যবহারকারীর ডেটা সাফ করে না বা কোনও ব্যতিক্রমও দেয় না যদিও আমি নিম্নলিখিত অনুমতিটি দিয়েছি।

<uses-permission android:name="android.permission.CLEAR_APP_USER_DATA"/>

প্রশ্ন:

অ্যাডবি শেল ব্যবহার করে অ্যাপ্লিকেশন ডেটা কীভাবে সাফ করবেন ?


3
আপনি বাইরের অ্যাপ্লিকেশনটির জন্য ডেটা সাফ করার কোনও সমাধান খুঁজে পেয়েছেন?
আনশুমান জয়সওয়াল

2
তৃতীয় পক্ষের অ্যাপ্লিকেশনটিতে অন্য অ্যাপ্লিকেশনটির ব্যবহারকারী ডেটা সাফ করার অনুমতি থাকা উচিত বলে মনে করবেন না। যদি এমনটি ঘটে থাকে তবে গোলযোগ হবে।
স্টোনল্যাম

উত্তর:


5

আফাইক ব্রাউজারের অ্যাপ্লিকেশন ডেটা অন্যান্য অ্যাপ্লিকেশনগুলির জন্য পরিষ্কারযোগ্য নয়, কারণ এটি স্টোর রয়েছে private_mode। সুতরাং এই কমান্ডটি কার্যকর করা কেবলমাত্র মূলের ডিভাইসগুলিতেই কাজ করতে পারে। অন্যথায় আপনার অন্য পদ্ধতির চেষ্টা করা উচিত।


কমান্ড লাইন সরঞ্জামগুলি অ্যাপ্লিকেশনগুলির দ্বারা ব্যবহারের জন্য অন্তর্ভুক্ত নয়। সম্ভবত তারা কেবলমাত্র আধা-সুবিধাযুক্ত অ্যাডবি শেল ব্যবহারকারীর জন্য কাজ করবে, যদি সিস্টেম সেটিংস অ্যাপ্লিকেশন অ্যাপ্লিকেশনটি জিইউআই-র বোতামে চাপ দেওয়া বোতামের সাথে কর্তৃত্বের ক্ষেত্রে কিছুটা তুলনীয় হিসাবে বিবেচিত হয়।
ক্রিস স্ট্রাটন

210

এই আদেশটি আমার পক্ষে কাজ করেছে:

adb shell pm clear packageName

2
ক্যাশেও সাফ করার জন্য অ্যাডাব ব্যবহার করা সম্ভব?
অ্যান্ড্রয়েড বিকাশকারী

4
@ এডুয়ার্ডো কুমো অবশ্যই আমি বলতে চাইছিলাম: কেবল ক্যাশে সাফ করার জন্য কি অ্যাডাব ব্যবহার করা সম্ভব?
অ্যান্ড্রয়েড বিকাশকারী

1
@Shayan আপনি শুধুমাত্র অ্যাপ্লিকেশন ক্যাশে মুছে ফেলতে নিম্নলিখিত লিঙ্ক চেকআউট করতে পারেন: stackoverflow.com/questions/18589471/... আমি না নিশ্চিত সম্পর্কে এই আদেশ বা কাজ করবে না।
মনমোহন সনি

5

কমান্ডের pm clear com.android.browserরুট অনুমতি প্রয়োজন।
সুতরাং, suপ্রথম চালান ।

নমুনা কোডটি এখানে:

private static final String CHARSET_NAME = "UTF-8";
String cmd = "pm clear com.android.browser";

ProcessBuilder pb = new ProcessBuilder().redirectErrorStream(true).command("su");
Process p = pb.start();

// We must handle the result stream in another Thread first
StreamReader stdoutReader = new StreamReader(p.getInputStream(), CHARSET_NAME);
stdoutReader.start();

out = p.getOutputStream();
out.write((cmd + "\n").getBytes(CHARSET_NAME));
out.write(("exit" + "\n").getBytes(CHARSET_NAME));
out.flush();

p.waitFor();
String result = stdoutReader.getResult();

শ্রেণি StreamReader:

import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.concurrent.CountDownLatch;

class StreamReader extends Thread {
    private InputStream is;
    private StringBuffer mBuffer;
    private String mCharset;
    private CountDownLatch mCountDownLatch;

    StreamReader(InputStream is, String charset) {
        this.is = is;
        mCharset = charset;
        mBuffer = new StringBuffer("");
        mCountDownLatch = new CountDownLatch(1);
    }

    String getResult() {
        try {
            mCountDownLatch.await();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        return mBuffer.toString();
    }

    @Override
    public void run() {
        InputStreamReader isr = null;
        try {
            isr = new InputStreamReader(is, mCharset);
            int c = -1;
            while ((c = isr.read()) != -1) {
                mBuffer.append((char) c);
            }

        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if (isr != null)
                    isr.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
            mCountDownLatch.countDown();
        }
    }
}

3

অ্যাপ্লিকেশন ডেটা সাফ করার জন্য দয়া করে এইভাবে চেষ্টা করুন।

    public void clearApplicationData() {
    File cache = getCacheDir();
    File appDir = new File(cache.getParent());
    if (appDir.exists()) {
        String[] children = appDir.list();
        for (String s : children) {
            if (!s.equals("lib")) {
                deleteDir(new File(appDir, s));Log.i("TAG", "**************** File /data/data/APP_PACKAGE/" + s + " DELETED *******************");
            }
        }
    }
}

public static boolean deleteDir(File dir) {
    if (dir != null &amp;&amp; dir.isDirectory()) {
        String[] children = dir.list();
        for (int i = 0; i < children.length; i++) {
            boolean success = deleteDir(new File(dir, children[i]));
            if (!success) {
                return false;
            }
        }
    }

    return dir.delete();
}

আমি এটি চেষ্টা করে
দেখছি

2
@ উদয়লাকমল আপনি অন্য অ্যাপ্লিকেশানের ক্যাশে ডেটা সাফ করতে সক্ষম হবেন বলে মনে করা হচ্ছে না, কারণ অ্যান্ড্রয়েড অন্যান্য অ্যাপ্লিকেশনগুলির দ্বারা সম্ভাব্য দূষিত পদক্ষেপগুলি থেকে অ্যাপ্লিকেশনগুলিকে রক্ষা করার জন্য ডিজাইন করা হয়েছে।
ক্রিস স্ট্রাটন

1

হ্যালো উদয়লাকমল,

public class MyApplication extends Application {
    private static MyApplication instance;

    @Override
    public void onCreate() {
        super.onCreate();
        instance = this;
    }

    public static MyApplication getInstance(){
        return instance;
    }

    public void clearApplicationData() {
        File cache = getCacheDir();
        File appDir = new File(cache.getParent());
        if(appDir.exists()){
            String[] children = appDir.list();
            for(String s : children){
                if(!s.equals("lib")){
                    deleteDir(new File(appDir, s));
                    Log.i("TAG", "File /data/data/APP_PACKAGE/" + s +" DELETED");
                }
            }
        }
    }

    public static boolean deleteDir(File dir) {
        if (dir != null && dir.isDirectory()) {
            String[] children = dir.list();
            for (int i = 0; i < children.length; i++) {
                boolean success = deleteDir(new File(dir, children[i]));
                if (!success) {
                    return false;
                }
            }
        }

        return dir.delete();
    }
}

দয়া করে এটি পরীক্ষা করুন এবং আমাকে জানান ...

আপনি এখান থেকে কোড ডাউনলোড করতে পারেন


-2
// To delete all the folders and files within folders recursively
File sdDir = new File(sdPath);

if(sdDir.exists())
    deleteRecursive(sdDir);




// Delete any folder on a device if exists
void deleteRecursive(File fileOrDirectory) {
    if (fileOrDirectory.isDirectory())
    for (File child : fileOrDirectory.listFiles())
        deleteRecursive(child);

    fileOrDirectory.delete();
}

1
এটি (যথাযথ অনুমতি দিয়ে ব্যবহার করা হলে) অ্যাপ্লিকেশন সমিতিটিকে বিবেচনা না করে বাহ্যিক স্টোরেজে ভাগ করা ফাইলগুলি মুছবে। এটি কোনও অ্যাপের প্রাইভেট ফাইল মুছবে না , যা প্রশ্নটিই ছিল।
ক্রিস স্ট্রাটন

-6

আপনি যদি ম্যানুয়ালি করতে চান তবে আপনি নিজের অ্যাপ্লিকেশনটিতে “Clear Data” বোতামটি ক্লিক করে আপনার ব্যবহারকারীর ডেটা সাফ করতে পারেনSettings–>Applications–>Manage Aplications–>

or Is there any other way to do that?

তারপরে এখানে কোড ডাউনলোড করুন

এখানে চিত্র বর্ণনা লিখুন


আমি তা বাস্তবিকভাবে করতে চাই, উদাহরণস্বরূপ আপনি পরামর্শ দিচ্ছেন যে আমি ইতিমধ্যে চেষ্টা করেছি কিন্তু এটি আমি খুঁজছি না
উদয়লাকমাল

যদি আপনি এটি চেষ্টা করে থাকেন তবে দয়া করে ভাগ করে নিন যে আপনি এটি চেষ্টা করেছেন। ঠিক আছে আমাকে অন্যভাবে পরীক্ষা করতে দাও .. !!
স্ট্রাইডার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.