Ну, вы уже сами дали ответ; вам нужно дождаться завершения создания файла. Один из способов сделать это - проверить, сохраняется ли файл. Пример этого можно найти здесь: Есть ли способ проверить, используется ли файл?
Обратите внимание, что вам придется изменить этот код, чтобы он работал в ваша ситуация. Возможно, вы захотите иметь что-то вроде (псевдокода):
public static void listener_Created()
{
while CheckFileInUse()
wait 1000 milliseconds
CopyFile()
}
Очевидно, что вы должны защитить себя от бесконечного while
, если приложение владельца никогда не освобождает блокировку. Кроме того, возможно, стоит проверить другие события из FileSystemWatcher
, на которые вы можете подписаться. Может быть событие, которое вы можете использовать, чтобы обойти эту проблему.
Казалось бы, ваша лучшая ставка - использовать BroadcastReceiver
. Вы можете создать новый BroadcastReceiver, который прослушивает Intent для запуска вашего уведомления и запускает вашу службу следующим образом:
public class MyIntentReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context _context, Intent _intent) {
if (_intent.getAction().equals(MY_INTENT)) {
// TODO Broadcast a notification
_context.startService(new Intent(_context, MyService.class));
}
}
}
И вы можете зарегистрировать этот IntentReceiver непосредственно в манифесте приложения без необходимости включать его в Activity :
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.domain.myapplication">
<application android:icon="@drawable/icon" android:label="@string/app_name">
<service android:enabled="true" android:name="MyService"></service>
<receiver android:enabled="true" android:name="MyIntentReceiver">
<intent-filter>
<action android:name="MY_INTENT" />
</intent-filter>
</receiver>
</application>
</manifest>
Воспользуйтесь сервисом. Я работаю определенно. Когда вы нажимаете на программу, она будет работать без графического интерфейса. Используйте pendintgintent ... getService (MySerice.class ....). Затем создайте новый класс MyService, расширяющий класс Service. Внутри MyService.class переопределите onStart () и делайте все, что хотите.
Я не уверен, что служба будет работать, но приемник вещания определенно не будет. URL запускаются с помощью startActivity (). Приемники вещания не могут ответить на это.
http://developer.android.com/reference/android/content/BroadcastReceiver.html
FTA: обратите внимание, что хотя класс Intent используется для отправки и получения этих широковещательные рассылки, механизм рассылки намерений здесь полностью отделен от интентов, которые используются для запуска операций с Context.startActivity (). BroadcastReceiver не может увидеть или захватить Intents, используемый с startActivity (); аналогично, когда вы транслируете Намерение, вы никогда не найдете или не начнете Активность.