区域覆盖所有的SD卡文件Programmaticaly [英] WipeOut All SdCard Files Programmaticaly

查看:119
本文介绍了区域覆盖所有的SD卡文件Programmaticaly的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图做消灭所有文件present外部SD卡的任务。

我没有得到我的地方code是行不通的。

请帮助我!

这些都是我的文件...

活性的main.xml

 < XML版本=1.0编码=UTF-8&GT?;

   <的LinearLayout机器人:方向=垂直
     机器人:layout_width =FILL_PARENT
     机器人:layout_height =FILL_PARENT
     的xmlns:机器人=htt​​p://schemas.android.com/apk/res/android>

    <按钮机器人:ID =@ + ID / wipe_button
        机器人:layout_width =FILL_PARENT
        机器人:layout_height =WRAP_CONTENT
         机器人:文本=擦除SD卡。 />

    < TextView的机器人:ID =@ + ID /路径
        机器人:layout_width =FILL_PARENT
        机器人:layout_height =WRAP_CONTENT/>

    < TextView的机器人:ID =@ + ID /文件
        机器人:layout_width =FILL_PARENT
        机器人:layout_height =WRAP_CONTENT/>

< / LinearLayout中>
 

WipeSdActivity.java

 包com.example.wipe_sd;

进口的java.io.File;
进口的java.util.ArrayList;
进口java.util.Iterator的;
进口的java.util.List;

进口android.app.Activity;
进口android.app.AlertDialog;
进口android.content.DialogInterface;
进口android.os.AsyncTask;
进口android.os.Bundle;
进口android.os.Environment;
进口android.util.Log;
进口android.view.Menu;
进口android.view.View;
进口android.widget.Button;
进口android.widget.TextView;

公共类WipeSDActivity延伸活动{

    私人诠释mDeletedFiles = 0;
      私人诠释mDeletedFolders = 0;

      私人TextView的mDirectoryTextView;
      私人TextView的mFileTextView;

      私人列表<字符串> mUndeleteableFiles;
      MyAsyncTask测试;
      公众按钮btnwipe_sd;

    @覆盖
    保护无效的onCreate(包savedInstanceState){
        super.onCreate(savedInstanceState);
        的setContentView(R.layout.activity_wipe_sd);

        btnwipe_sd =(按钮)findViewById(R.id.wipe_button);


        测试=新MyAsyncTask();

        文件[] arrayOfFile =新的文件[1];
        arrayOfFile [0] =新的文件(Environment.getExternalStorageDirectory()getPath());
        test.execute(arrayOfFile);

        btnwipe_sd.setOnClickListener(新View.OnClickListener()
        {
              公共无效的onClick(查看paramAnonymousView)
              {
                新AlertDialog.Builder(WipeSDActivity.this).setCancelable(真)
                .setMessage(这将试图擦去你的SD卡中的所有目录和文件。)
                .setPositiveButton(消灭,新DialogInterface.OnClickListener()
                {
                  公共无效的onClick(DialogInterface对话,诠释其)
                  {

                  }
                })。setNegativeButton(NO!,新DialogInterface.OnClickListener()
                {
                  公共无效的onClick(DialogInterface对话,诠释其)
                  {
                    dialog.dismiss();
                  }
                })。显示();
              }
            });

        this.mDirectoryTextView =((TextView中)findViewById(R.id.path));
        this.mFileTextView =((TextView中)findViewById(R.id.file));
        this.mUndeleteableFiles =新的ArrayList();


    }

    公共类MyAsyncTask扩展的AsyncTask<文件,整数,整数GT; {


        保护整数doInBackground(文件[] ArrayOfFile){
            // TODO自动生成方法存根
            INT I = 0;
            progressivelyDelete(ArrayOfFile [0]);

            如果(ArrayOfFile [0] .exists())

                I = ArrayOfFile [0] .listFiles()的长度。

            返回Integer.valueOf(ⅰ);

        }

        私人无效progressivelyDelete(文件sd_File){
            // TODO自动生成方法存根

             如果(sd_File == NULL);

             而(真)
                 {

                         如果(sd_File.isDirectory())
                         {
                             updateDirectory(sd_File.getPath());
                             文件[] arrayOfFile = sd_File.listFiles();

                             INT I = arrayOfFile.length;
                                INT J = 0;
                                如果(J<我)
                                {
                                    文件msd_File = arrayOfFile [J]。
                                    如果(msd_File.canWrite())
                                      progressivelyDelete(msd_File);

                                    而(真)
                                    {
                                        J ++;
                                        打破;

                                    }
                                    WipeSDActivity.this.mUndeleteableFiles.add(msd_File.getAbsolutePath());
                                }


                                sd_File.delete();
                         }
                         其他
                         {
                            sd_File.delete();
                            updateFile(sd_File.getName());

                         }
                 }
        }

        私人无效updateFile(最后字符串中的paramString){
            // TODO自动生成方法存根
             Log.d(SdWipe,文件 - +的paramString);

             WipeSDActivity.this.runOnUiThread(新的Runnable(){

                @覆盖
                公共无效的run(){
                    // TODO自动生成方法存根

                    TextView的localfile_TextView = WipeSDActivity.this.mFileTextView;
                    [对象] arrayofObject =新的对象[1];

                    arrayofObject [0] =的paramString;


                }
            });

        }

        私人无效updateDirectory(最后字符串中的paramString){
            // TODO自动生成方法存根

            Log.d(SdWipe,文件夹 - +中的paramString);
            WipeSDActivity.this.runOnUiThread(新的Runnable(){

                @覆盖
                公共无效的run(){
                    // TODO自动生成方法存根

                    TextView的localdir_TextView = WipeSDActivity.this.mDirectoryTextView;
                    [对象] arrayOfObject =新的对象[1];
                    arrayOfObject [0] =的paramString;

                    localdir_TextView.setText(的String.Format(当前正在处理\ N%的,arrayOfObject));

                }
            });

        }

        保护无效onPostExecute(整数paramInteger)
          {

            TextView的dir_textview = WipeSDActivity.this.mDirectoryTextView;
            [对象] arrayOfObject =新的对象[2];

            arrayOfObject [0] = Integer.valueOf(WipeSDActivity.this.mDeletedFolders);
            arrayOfObject [1] = Integer.valueOf(WipeSDActivity.this.mDeletedFiles);

            dir_textview.setText(的String.Format(完成的\ n%s的文件夹中删除\ñ%s的文件删除,arrayOfObject));

             StringBuilder的localStringBuilder =新的StringBuilder();
             迭代器localIterator = WipeSDActivity.this.mUndeleteableFiles.iterator();

             而(localIterator.hasNext())
             {
                 字符串str =(字符串)localIterator.next();

                 localStringBuilder.append(STR +\ N);

             }
             WipeSDActivity.this.mFileTextView.setText(留在SD卡上的文件:\ NparamInteger + + localStringBuilder);

          }


        在preExecute保护无效()
                {

                    WipeSDActivity.this.mUndeleteableFiles.clear();
                }



    }

}
 

的Manifest.xml

 < XML版本=1.0编码=UTF-8&GT?;
<舱单的xmlns:机器人=htt​​p://schemas.android.com/apk/res/android
    包=com.example.wipe_sd
    安卓版code =1
    机器人:VERSIONNAME =1.0>

    <用途-SDK
        安卓的minSdkVersion =8
        机器人:targetSdkVersion =18/>
<使用-权限的Andr​​oid:名称=android.permission.WRITE_EXTERNAL_STORAG​​E/>

    <应用
        机器人:allowBackup =真
        机器人:图标=@可绘制/ ic_launcher
        机器人:标签=@字符串/ APP_NAME
        机器人:主题=@风格/ AppTheme>
        <活动
            机器人:名称=com.example.wipe_sd.WipeSDActivity
            机器人:标签=@字符串/ APP_NAME>
            <意向滤光器>
                <作用机器人:名称=android.intent.action.MAIN/>

                <类机器人:名称=android.intent.category.LAUNCHER/>
            &所述; /意图滤光器>
        < /活性GT;
    < /用途>

< /舱单>
 

日志猫错误我得到的是:

  02-08 16:47:13.460:E / AndroidRuntime(270):java.lang.RuntimeException的:无法启动的活动
ComponentInfo {com.example.wipe_sd / com.example.wipe_sd.WipeSDActivity}:显示java.lang.NullPointerException
02-08 16:47:13.460:E / AndroidRuntime(270):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)
02-08 16:47:13.460:E / AndroidRuntime(270):在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
02-08 16:47:13.460:E / AndroidRuntime(270):在android.app.ActivityThread.access $ 2300(ActivityThread.java:125)
02-08 16:47:13.460:E / AndroidRuntime(270):在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:2033)
02-08 16:47:13.460:E / AndroidRuntime(270):在android.os.Handler.dispatchMessage(Handler.java:99)
02-08 16:47:13.460:E / AndroidRuntime(270):在android.os.Looper.loop(Looper.java:123)
02-08 16:47:13.460:E / AndroidRuntime(270):在android.app.ActivityThread.main(ActivityThread.java:4627)
02-08 16:47:13.460:E / AndroidRuntime(270):在java.lang.reflect.Method.invokeNative(本机方法)
02-08 16:47:13.460:E / AndroidRuntime(270):在java.lang.reflect.Method.invoke(Method.java:521)
02-08 16:47:13.460:E / AndroidRuntime(270):在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:868)
02-08 16:47:13.460:E / AndroidRuntime(270):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
02-08 16:47:13.460:E / AndroidRuntime(270):在dalvik.system.NativeStart.main(本机方法)
02-08 16:47:13.460:E / AndroidRuntime(270):由:显示java.lang.NullPointerException
02-08 16:47:13.460:E / AndroidRuntime(270):在com.example.wipe_sd.WipeSDActivity $ MyAsyncTask.on preExecute(WipeSDActivity.java:204)
02-08 16:47:13.460:E / AndroidRuntime(270):在android.os.AsyncTask.execute(AsyncTask.java:391)
02-08 16:47:13.460:E / AndroidRuntime(270):在com.example.wipe_sd.WipeSDActivity.onCreate(WipeSDActivity.java:44)
02-08 16:47:13.460:E / AndroidRuntime(270):在android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
02-08 16:47:13.460:E / AndroidRuntime(270):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
02-08 16:47:13.460:E / AndroidRuntime(270):11 ...更多
 

解决方案

在这里,我修改了 WipeSDActivity.java class.Please检查,并让我know.Hope它应该对你有帮助。谢谢你。

 进口的java.io.File;
进口android.app.Activity;
进口android.app.AlertDialog;
进口android.app.ProgressDialog;
进口android.content.DialogInterface;
进口android.os.Bundle;
进口android.os.Environment;
进口android.os.Handler;
进口android.view.View;
进口android.view.View.OnClickListener;
进口android.widget.Button;

公共类WipeSDActivity延伸活动{

      私有静态ProgressDialog进度;
      私有静态诠释progressBarStatus = 0;
      私有静态处理程序progressBarHandler =新的处理程序();
      公众按钮btnwipe_sd;
      私人诠释fileCount = 0;

    @覆盖
    保护无效的onCreate(包savedInstanceState){
    super.onCreate(savedInstanceState);
    的setContentView(R.layout.sd_card);

    btnwipe_sd =(按钮)findViewById(R.id.wipe_button);
    btnwipe_sd.setOnClickListener(新OnClickListener()
    {
          公共无效的onClick(最终查看查看)
          {

              新AlertDialog.Builder(WipeSDActivity.this).setCancelable(真)
              .setMessage(这将试图擦去你的SD卡中的所有目录和文件。)
              .setPositiveButton(消灭,新DialogInterface.OnClickListener()
              {
                公共无效的onClick(DialogInterface对话,诠释其)
                {
                  dialog.dismiss();
                  FormatSDCard(视图);
                }
              })。setNegativeButton(NO!,新DialogInterface.OnClickListener()
              {
                公共无效的onClick(DialogInterface对话,诠释其)
                {
                  dialog.dismiss();
                }
              })。显示();
          }
        });
    }


    公共无效FormatSDCard(视图v){
        进度=新ProgressDialog(v.getContext());
        progressBar.setCancelable(假);
        progressBar.setMessage(文件删除......);
        progressBar.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
        progressBar.setProgress(0);
        progressBar.setMax(100);
        progressBar.show();

        新主题(新的Runnable(){
            公共无效的run(){
                而(progressBarStatus< 100){
                    // fileCount = 0;
                    //过程中的一些任务
                    progressBarStatus = wipingSdcard();
                    //你的电脑是太快了,睡眠1秒
                    尝试 {
                        视频下载(1000);
                    }赶上(InterruptedException异常E){
                        e.printStackTrace();
                    }

                    //更新进度条
                    progressBarHandler.post(新的Runnable(){
                        公共无效的run(){
                            progressBar.setProgress(progressBarStatus);
                        }
                    });
                }

                // OK,文件被删除,
                如果(progressBarStatus> = 100){

                    //睡眠2秒,这样您就可以看到100%
                    尝试 {
                        视频下载(2000);
                    }赶上(InterruptedException异常E){
                        e.printStackTrace();
                    }

                    //关闭进度条对话框
                    progressBar.dismiss();
                }
            }
        })。开始();
    }


    公众诠释wipingSdcard(){
    文件deleteMatchingFile =新的文件(环境
            。.getExternalStorageDirectory()的toString());
    尝试 {
        文件[]文件名= deleteMatchingFile.listFiles();
        如果(文件名=空&安培;!&安培; filenames.length大于0){
            对于(文件临时文件:文件名){
                如果(tempFile.isDirectory()){
                    wipeDirectory(tempFile.toString());
                    tempFile.delete();
                } 其他 {
                    tempFile.delete();
                }
                fileCount ++;
                progressBarStatus = fileCount;

                    progressBarHandler.post(新的Runnable(){
                        公共无效的run(){
                            progressBar.setProgress(progressBarStatus);
                        }
                    });
            }
        } 其他 {
            deleteMatchingFile.delete();
        }
    }赶上(例外五){
        e.printStackTrace();
    }
        返回fileCount;
    }

    私人无效wipeDirectory(字符串名称){
    文件directoryFile =新的文件(名称);
    文件[]文件名= directoryFile.listFiles();
    如果(文件名=空&安培;!&安培; filenames.length大于0){
        对于(文件临时文件:文件名){
            如果(tempFile.isDirectory()){
                wipeDirectory(tempFile.toString());
                tempFile.delete();
            } 其他 {
                tempFile.delete();
            }
        }
    } 其他 {
        directoryFile.delete();
    }
    }
}
 

你也得给的权限,如果你使用的是> 1.6 SDK

 <使用-权限的Andr​​oid:名称=android.permission.READ_EXTERNAL_STORAG​​E/>
 <使用-权限的Andr​​oid:名称=android.permission.WRITE_EXTERNAL_STORAG​​E/>
 

AndroidManifest.xml中文件

I am trying to do a Task of Wipe Out all the files present in the external SdCard.

I am not getting where my code is not working.

Please Help me !!!

These are my Files ...

activity-main.xml

    <?xml version="1.0" encoding="utf-8"?>

   <LinearLayout android:orientation="vertical" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent"
     xmlns:android="http://schemas.android.com/apk/res/android">

    <Button android:id="@+id/wipe_button" 
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content"
         android:text="Wipe the SD card." />

    <TextView android:id="@+id/path" 
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content" />

    <TextView android:id="@+id/file" 
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content" />

</LinearLayout>

WipeSdActivity.java

package com.example.wipe_sd;

import java.io.File;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class WipeSDActivity extends Activity {

    private int mDeletedFiles = 0;
      private int mDeletedFolders = 0;

      private TextView mDirectoryTextView;
      private TextView mFileTextView;

      private List<String> mUndeleteableFiles;
      MyAsyncTask test;
      public Button btnwipe_sd;

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

        btnwipe_sd = (Button)findViewById(R.id.wipe_button);


        test = new MyAsyncTask();

        File[] arrayOfFile = new File[1];
        arrayOfFile[0] = new File(Environment.getExternalStorageDirectory().getPath());
        test.execute(arrayOfFile);

        btnwipe_sd.setOnClickListener(new View.OnClickListener()
        {
              public void onClick(View paramAnonymousView)
              {
                new AlertDialog.Builder(WipeSDActivity.this).setCancelable(true)
                .setMessage("This will attempt to wipe all directories and files on your SD card.")
                .setPositiveButton("WIPE", new DialogInterface.OnClickListener()
                {
                  public void onClick(DialogInterface dialog, int which)
                  {

                  }
                }).setNegativeButton("NO!", new DialogInterface.OnClickListener()
                {
                  public void onClick(DialogInterface dialog, int which)
                  {
                    dialog.dismiss();
                  }
                }).show();
              }
            });

        this.mDirectoryTextView = ((TextView)findViewById(R.id.path));
        this.mFileTextView = ((TextView)findViewById(R.id.file));
        this.mUndeleteableFiles = new ArrayList();


    }

    public  class MyAsyncTask extends AsyncTask<File,Integer,Integer>{


        protected Integer doInBackground(File[] ArrayOfFile) {
            // TODO Auto-generated method stub
            int i = 0;
            progressivelyDelete(ArrayOfFile[0]);

            if (ArrayOfFile[0].exists())

                i = ArrayOfFile[0].listFiles().length;

            return Integer.valueOf(i);

        }

        private void progressivelyDelete(File sd_File) {
            // TODO Auto-generated method stub

             if (sd_File == null);

             while (true)
                 {

                         if (sd_File.isDirectory())
                         {
                             updateDirectory(sd_File.getPath());
                             File[] arrayOfFile = sd_File.listFiles();

                             int i = arrayOfFile.length;
                                int j = 0;
                                if (j < i)
                                {
                                    File msd_File = arrayOfFile[j];
                                    if (msd_File.canWrite())
                                      progressivelyDelete(msd_File);

                                    while (true)
                                    {
                                        j++;
                                        break;

                                    }
                                    WipeSDActivity.this.mUndeleteableFiles.add(msd_File.getAbsolutePath());
                                }


                                sd_File.delete();
                         }
                         else 
                         {
                            sd_File.delete();
                            updateFile(sd_File.getName());

                         }
                 }  
        }

        private void updateFile(final String paramString) {
            // TODO Auto-generated method stub
             Log.d("SdWipe", "File - " + paramString);

             WipeSDActivity.this.runOnUiThread(new Runnable() {

                @Override
                public void run() {
                    // TODO Auto-generated method stub

                    TextView localfile_TextView = WipeSDActivity.this.mFileTextView;
                    Object[] arrayofObject = new Object[1];

                    arrayofObject[0] = paramString;


                }
            });

        }

        private void updateDirectory(final String paramString) {
            // TODO Auto-generated method stub

            Log.d("SdWipe", "Folder - " + paramString);
            WipeSDActivity.this.runOnUiThread(new Runnable() {

                @Override
                public void run() {
                    // TODO Auto-generated method stub

                    TextView localdir_TextView = WipeSDActivity.this.mDirectoryTextView;
                    Object[] arrayOfObject = new Object[1];
                    arrayOfObject[0] = paramString;

                    localdir_TextView.setText(String.format("Currently processing\n%s", arrayOfObject));

                }
            });

        }

        protected void onPostExecute(Integer paramInteger)
          {

            TextView dir_textview = WipeSDActivity.this.mDirectoryTextView;
            Object[] arrayOfObject = new Object[2];

            arrayOfObject[0] = Integer.valueOf(WipeSDActivity.this.mDeletedFolders);
            arrayOfObject[1] = Integer.valueOf(WipeSDActivity.this.mDeletedFiles);

            dir_textview.setText(String.format("Done\n%s folders deleted\n%s files deleted",arrayOfObject));

             StringBuilder localStringBuilder = new StringBuilder();
             Iterator localIterator = WipeSDActivity.this.mUndeleteableFiles.iterator();

             while(localIterator.hasNext())
             {
                 String str = (String) localIterator.next();

                 localStringBuilder.append(str + "\n");

             }
             WipeSDActivity.this.mFileTextView.setText(paramInteger + "files left on SD Card:\n" + localStringBuilder);

          }


        protected void onPreExecute()
                {

                    WipeSDActivity.this.mUndeleteableFiles.clear();
                }



    }

}

Manifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.wipe_sd"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="18" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.example.wipe_sd.WipeSDActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

The Log Cat Error I am getting is:

02-08 16:47:13.460: E/AndroidRuntime(270): java.lang.RuntimeException: Unable to start activity 
ComponentInfo{com.example.wipe_sd/com.example.wipe_sd.WipeSDActivity}: java.lang.NullPointerException
02-08 16:47:13.460: E/AndroidRuntime(270):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)
02-08 16:47:13.460: E/AndroidRuntime(270):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
02-08 16:47:13.460: E/AndroidRuntime(270):  at android.app.ActivityThread.access$2300(ActivityThread.java:125)
02-08 16:47:13.460: E/AndroidRuntime(270):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
02-08 16:47:13.460: E/AndroidRuntime(270):  at android.os.Handler.dispatchMessage(Handler.java:99)
02-08 16:47:13.460: E/AndroidRuntime(270):  at android.os.Looper.loop(Looper.java:123)
02-08 16:47:13.460: E/AndroidRuntime(270):  at android.app.ActivityThread.main(ActivityThread.java:4627)
02-08 16:47:13.460: E/AndroidRuntime(270):  at java.lang.reflect.Method.invokeNative(Native Method)
02-08 16:47:13.460: E/AndroidRuntime(270):  at java.lang.reflect.Method.invoke(Method.java:521)
02-08 16:47:13.460: E/AndroidRuntime(270):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
02-08 16:47:13.460: E/AndroidRuntime(270):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
02-08 16:47:13.460: E/AndroidRuntime(270):  at dalvik.system.NativeStart.main(Native Method)
02-08 16:47:13.460: E/AndroidRuntime(270): Caused by: java.lang.NullPointerException
02-08 16:47:13.460: E/AndroidRuntime(270):  at com.example.wipe_sd.WipeSDActivity$MyAsyncTask.onPreExecute(WipeSDActivity.java:204)
02-08 16:47:13.460: E/AndroidRuntime(270):  at android.os.AsyncTask.execute(AsyncTask.java:391)
02-08 16:47:13.460: E/AndroidRuntime(270):  at com.example.wipe_sd.WipeSDActivity.onCreate(WipeSDActivity.java:44)
02-08 16:47:13.460: E/AndroidRuntime(270):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
02-08 16:47:13.460: E/AndroidRuntime(270):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
02-08 16:47:13.460: E/AndroidRuntime(270):  ... 11 more

解决方案

Here i modified the WipeSDActivity.java class.Please check and let me know.Hope it should helpful for you. Thanks.

import java.io.File;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.os.Environment;
import android.os.Handler;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class WipeSDActivity extends Activity {

      private static ProgressDialog progressBar;
      private static int progressBarStatus = 0;
      private static Handler progressBarHandler = new Handler();      
      public Button btnwipe_sd;
      private int fileCount = 0;

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

    btnwipe_sd = (Button)findViewById(R.id.wipe_button);
    btnwipe_sd.setOnClickListener(new OnClickListener()
    {
          public void onClick(final View view)
          {

              new AlertDialog.Builder(WipeSDActivity.this).setCancelable(true)
              .setMessage("This will attempt to wipe all directories and files on your SD card.")
              .setPositiveButton("WIPE", new DialogInterface.OnClickListener()
              {
                public void onClick(DialogInterface dialog, int which)
                {
                  dialog.dismiss();
                  FormatSDCard(view);
                }
              }).setNegativeButton("NO!", new DialogInterface.OnClickListener()
              {
                public void onClick(DialogInterface dialog, int which)
                {
                  dialog.dismiss();
                }
              }).show();
          }
        });
    }


    public void FormatSDCard(View v){
        progressBar = new ProgressDialog(v.getContext());
        progressBar.setCancelable(false);
        progressBar.setMessage("File deleting ...");
        progressBar.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
        progressBar.setProgress(0);
        progressBar.setMax(100);
        progressBar.show();

        new Thread(new Runnable() {
            public void run() {
                while (progressBarStatus < 100) {
                    //fileCount = 0;
                    // process some tasks
                    progressBarStatus = wipingSdcard();
                    // your computer is too fast, sleep 1 second
                    try {
                        Thread.sleep(1000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }

                    // Update the progress bar
                    progressBarHandler.post(new Runnable() {
                        public void run() {
                            progressBar.setProgress(progressBarStatus);
                        }
                    });
                }

                // ok, file is deleted,
                if (progressBarStatus >= 100) {

                    // sleep 2 seconds, so that you can see the 100%
                    try {
                        Thread.sleep(2000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }

                    // close the progress bar dialog
                    progressBar.dismiss();
                }
            }
        }).start();     
    }


    public int wipingSdcard() {
    File deleteMatchingFile = new File(Environment
            .getExternalStorageDirectory().toString());
    try {
        File[] filenames = deleteMatchingFile.listFiles();
        if (filenames != null && filenames.length > 0) {
            for (File tempFile : filenames) {
                if (tempFile.isDirectory()) {
                    wipeDirectory(tempFile.toString());
                    tempFile.delete();
                } else {
                    tempFile.delete();
                }
                fileCount++;
                progressBarStatus = fileCount;

                    progressBarHandler.post(new Runnable() {
                        public void run() {
                            progressBar.setProgress(progressBarStatus);
                        }
                    });
            }
        } else {
            deleteMatchingFile.delete();
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
        return fileCount;
    }

    private void wipeDirectory(String name) {
    File directoryFile = new File(name);
    File[] filenames = directoryFile.listFiles();
    if (filenames != null && filenames.length > 0) {
        for (File tempFile : filenames) {
            if (tempFile.isDirectory()) {
                wipeDirectory(tempFile.toString());
                tempFile.delete();
            } else {
                tempFile.delete();
            }
        }
    } else {
        directoryFile.delete();
    }
    }
}

Also you have to give permission if you are using >1.6 SDK

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

in AndroidManifest.xml file

这篇关于区域覆盖所有的SD卡文件Programmaticaly的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆