署名の png ファイルをサーバーの 1 つに移動する割り当てがあります。私が実装した解決策は、保存されているフォルダーを監視して移動するバックグラウンド サービスを用意することです。これはうまくいきますが、サービスは一定の時間が経過するとシャットダウンします.1時間かそこらかもしれませんが、永続的にしたいと思います. いくつかの調査を行った結果、アラーム マネージャーまたはハンドラーを使用してアクティビティを維持することができました。
ハンドラを使用することにしました。ただし、アクティビティが呼び出されるたびにデバイスがハングし、更新するたびにより多くのメモリが必要になります。原因は、'stopWatching()' を呼び出さないことが原因である可能性がありますが、問題を誤って処理した可能性があります。
SendToPHP.java
public class SendToPHP extends Activity {
final int FIFTEEN_MINUTES_IN_MILLISECONDS = 900000;
//The handler will run the function restart at a later time
//This should prevent the intent service timeout.
Handler handler = new Handler();
Runnable runnable = new Runnable() {
public void run() {
finish();
startActivity(getIntent());
}
};
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Intent mServiceIntent = new Intent(SendToPHP.this,
BackgroundService.class);
// Starts the IntentService
SendToPHP.this.startService(mServiceIntent);
handler.postDelayed(runnable, FIFTEEN_MINUTES_IN_MILLISECONDS);
}
}
BackgroundService.java
@Override
protected void onHandleIntent(Intent workIntent) {
/************* Php script path ****************/
upLoadServerUri = "*redacted*";
//FileObserver monitors files/directories, in this case we want any file that is
//created in SignItPictures
FileObserver observer = new FileObserver(android.os.Environment
.getExternalStorageDirectory().toString() + "/Pictures/SignItPictures", FileObserver.CREATE ) {
@Override
public void onEvent(int event, String file) {
uploadFileName = file;
uploadFile(uploadFilePath + "/" + uploadFileName);
}
};
observer.startWatching(); // start the observer
}