Завершение работы работает на отладчике, но не на нормальном запуске - PullRequest
0 голосов
/ 12 апреля 2020

У меня есть приемник, в котором я проверяю, выбрал ли пользователь камеру для загрузки файла.

Если произойдет определенное условие, я немедленно завершу работу с камерой.

Я делаю это так, потому что любая попытка завершить sh активность с получателя была безуспешной.

Вот код, который я использую для этого:

I Я использую это для намерения, которое в конечном итоге вызовет получателя:

Intent[] intentArray;
if (takePictureIntent != null) {
    intentArray = new Intent[]{takePictureIntent};
}
else {
    intentArray = new Intent[0];
}

Intent receiver = new Intent(getBaseContext(), FileChoosingReceiver.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(getBaseContext(), 0, receiver, PendingIntent.FLAG_UPDATE_CURRENT);

Intent intent = new Intent(Intent.ACTION_CHOOSER);
Intent chooserIntent=Intent.createChooser(intent, "Seleccione modo", pendingIntent.getIntentSender());
chooserIntent.putExtra(Intent.EXTRA_INTENT, contentSelectionIntent);
chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, intentArray);
startActivityForResult(chooserIntent, file_req_code);

В получателе я делаю следующее:

if (!((Float.valueOf(MainActivity.latitude)+0.00005>=lat) && (Float.valueOf(MainActivity.latitude)-0.00005<=lat) && ((Float.valueOf(MainActivity.longitude)+0.00005>=longi) && (Float.valueOf(MainActivity.longitude)-0.00005<=longi))))
{
    Toast.makeText(MainActivity.myContext,"No está cerca de la posición indicada",Toast.LENGTH_LONG).show();                                    
    isValidLocation=false;
}

Наконец, после первого кода я делаю следующее :

new Thread(new Runnable() {
   @Override
   public void run() {
       while (FileChoosingReceiver.isValidLocation){                                                          

       }

       if (!FileChoosingReceiver.isValidLocation)
       {

       finishActivity(file_req_code);
       }


       FileChoosingReceiver.isValidLocation=true;

       }
       }).start();

Я знаю, что лучше было бы проверить, что выбранным способом загрузки файлов является камера перед началом действия, и завершить действие из получателя, а не из потока ожидания в действии. решения, но ни один из них, кажется, не работает.

Действительно, этот код работает как хотел ... но только в режиме отладки, запуск его со второго раза, когда он активирует камеру и не завершает sh это.

Мне также известно, что если бы пользователь сделал еще один вызов активности до того, как для isValidLocation задано значение true, приложение не будет работать должным образом, но, честно говоря, я не вижу, чтобы это когда-либо происходило, если только не возникали странные обстоятельства, поэтому Я не понимаю, почему это может вызвать проблемы.

Что я должен исправить, чтобы он правильно работал при запуске?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...