Android:我正在尝试使用Jobscheduler删除图库中的图片,但无法删除它们

问题描述

我正在创建一个Android应用程序,用于管理图库中的屏幕快照文件夹。 该应用程序的功能之一是自动删除屏幕快照图像,为此,我创建了两个类:DeleteActivityMyJobServiceMyJobService类正在与JobScheduler进行后台工作。因此,我将把uri类的DeleteActivity发送到MyJobService类,并从屏幕快照中删除图片带有uri的文件夹,但这是到目前为止我一直在处理的代码,但是没有错误,并且没有任何反应。有什么问题?除了使用uri之外,还有其他方法可以自动删除图片吗?请告诉我是否有个好方法。

DeleteAcitivity.class

 public class MainActivity extends AppCompatActivity {

    private static final int READ_REQUEST_CODE = 42;
    private static final int JOB_REQUEST_CODE = 43;
    public static final String PREFS_NAME = "MyPrefsFile";
    private static final int DELETE_JOB_KEY = 123;
    SharedPreferences sharedPreferences;
    SharedPreferences.Editor editor;
    private static final String TAG = "MainActivity";

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

        sharedPreferences = getSharedPreferences("LastSetting",Context.MODE_PRIVATE);
        editor = sharedPreferences.edit();

        final int spinnerSelected = sharedPreferences.getInt("LastClick",0);
        final Spinner spinner = (Spinner) findViewById(R.id.spinner);
        final View txt1 = findViewById(R.id.txt1);
        final View txt2 = findViewById(R.id.txt2);

        final SharedPreferences settings = getSharedPreferences(PREFS_NAME,0);
        boolean silent = settings.getBoolean("switchkey",false);


        Switch deleteSwitch = findViewById(R.id.switchdel);
        deleteSwitch.setChecked(silent);
        deleteSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView,boolean isChecked) {
                if (isChecked) {
                    txt1.setEnabled(true);
                    spinner.setEnabled(true);
                    txt2.setEnabled(true);

                    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
                    startActivityForResult(intent,JOB_REQUEST_CODE);


                } else {
                    txt1.setEnabled(false);
                    spinner.setEnabled(false);
                    txt2.setEnabled(false);

                    JobScheduler scheduler = (JobScheduler) getSystemService(JOB_SCHEDULER_SERVICE);
                    scheduler.cancel(DELETE_JOB_KEY);
                    Log.d(TAG,"Job cancelled");

                }

                SharedPreferences settings = getSharedPreferences(PREFS_NAME,0);
                SharedPreferences.Editor editor = settings.edit();
                editor.putBoolean("switchkey",isChecked).commit();

            }
        });


        ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this,R.array.days_array,android.R.layout.simple_spinner_item);
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        spinner.setAdapter(adapter);
        spinner.setSelection(spinnerSelected);
        spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parent,View view,int position,long id) {
                editor.putInt("LastClick",position).commit();
            }

            @Override
            public void onNothingSelected(AdapterView<?> parent) {

            }
        });

        String txtSpinner = spinner.getSelectedItem().toString();

        Button picture = (Button) findViewById(R.id.btnfind);
        picture.setOnClickListener(new View.OnClickListener() {

            public void onClick(View v) {  
                Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
                intent.addCategory(Intent.CATEGORY_OPENABLE);
                intent.setType("image/*");
                startActivityForResult(intent,READ_REQUEST_CODE);
            }
        });


    }


    @Override
    protected void onActivityResult(int requestCode,int resultCode,Intent resultData) {
        super.onActivityResult(requestCode,resultCode,resultData);
        if (requestCode == READ_REQUEST_CODE && resultCode == RESULT_OK) {
            try {
                Uri uri = null;
                if (resultData != null) {
                    uri = resultData.getData();
                }

                Bitmap img = getBitmapFromUri(uri);
                DocumentsContract.deleteDocument(getContentResolver(),uri);
            }  // try

            catch (Exception e) {
            } // catch
        } // if

        if(requestCode == JOB_REQUEST_CODE)
        {
            if(resultData != null) {
                ComponentName componentName = new ComponentName(MainActivity.this,MyJobService.class);
                PersistableBundle bundle = new PersistableBundle();
                bundle.putString("imageUri",resultData.getData().toString());
                JobInfo.Builder builder = new JobInfo.Builder(DELETE_JOB_KEY,componentName)
                        .setExtras(bundle)
                        .setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY)
                        .setPersisted(true)
                        .setPeriodic(15 * 60 * 1000);

                JobScheduler scheduler = (JobScheduler) getSystemService(JOB_SCHEDULER_SERVICE);
                scheduler.schedule(builder.build());
            }
        }

    } // onActivityResult()


    private Bitmap getBitmapFromUri(Uri uri) throws IOException {
        ParcelFileDescriptor parcelFileDescriptor =
                getContentResolver().openFileDescriptor(uri,"r");
        FileDescriptor fileDescriptor = parcelFileDescriptor.getFileDescriptor();
        Bitmap image = BitmapFactory.decodeFileDescriptor(fileDescriptor);
        parcelFileDescriptor.close();
        return image;
    }



}

MyJobService.class

 public class MyJobService extends JobService {
 private static final String TAG = "MyJobService";
 private boolean jobCancelled = false;
 private JobParameters jobParameters;
 private DeleteAsyncTask deleteAsyncTask;


 @Override
 public boolean onStartJob(JobParameters params) {

     this.jobParameters = params;
     PersistableBundle persistableBundle = params.getExtras();
     String strUri = persistableBundle.getString("imageUri");
     Uri uri = Uri.parse(strUri);
     deleteAsyncTask = (DeleteAsyncTask) new DeleteAsyncTask().execute(uri);
     return true;

 }


 @Override
 public boolean onStopJob(JobParameters params) {
     Log.d(TAG,"onStopJob: Job cancelled before completion");
     if(null != deleteAsyncTask){
         if(!deleteAsyncTask.isCancelled())
             deleteAsyncTask.cancel(true);
     }
     return true;
 }

 private class DeleteAsyncTask extends AsyncTask<Uri,Integer,String>{

     @Override
     protected String doInBackground(Uri... uris) {
         try {
             DocumentsContract.deleteDocument(getContentResolver(),uris[0]);
         } catch (FileNotFoundException e) {
             e.printStackTrace();
         }

         return "Job Finished!";
     }

     @Override
     protected void onProgressUpdate(Integer... values){
         super.onProgressUpdate(values);

         Log.d(TAG,"onProgressUpdate: i was: " + values[0]);
     }


     @Override
     protected void onPostExecute(String s) {
         super.onPostExecute(s);

         Log.d(TAG,"onPostExecute: message: " + s);
         jobFinished(jobParameters,true);
     }

 }







}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...