问题描述
我正在创建一个Android应用程序,用于管理图库中的屏幕快照文件夹。
该应用程序的功能之一是自动删除屏幕快照图像,为此,我创建了两个类:DeleteActivity
和MyJobService
。 MyJobService
类正在与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 (将#修改为@)