#android
#Android
Вопрос:
Я создаю приложение для 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 amp;amp; 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);
}
}
}
Комментарии:
1.
bundle.putString("imageUri", resultData.getData().toString());
resultData.getData().toString() не является uri. Невозможно с намерением использовать камеру. Пожалуйста, сообщите его значение.2. Далее в вашем коде — слишком много — нет ничего со скриншотами.
3. Вы правы, потому что, прежде чем я сделаю это с папкой со снимками экрана, я просто работаю со всей картинкой в галерее, а затем я собираюсь сделать это с картинками из папки со снимками экрана, если это сработает, и я не знаю, смогу ли я сделать это приложение, как планировалось, и я не знаю, смогу ли я сделать это приложение, как планировалось, и я не знаю, смогу ли я сделать это.не знаю, что делать, если этот код неверен, но спасибо, что ответили мне и хорошего дня.