0

Androidでファイルオブザーバーを利用するアプリを書いています。とにかくファイルが変更された場合(作成など)、アップロードする必要があります。キューを実装し、スレッドなどを使用してメモリ不足にならないようにするために、IntentService を使用してファイルを 1 つずつアップロードし、失敗したときに実行しないようにして、ユーザーが接続を回復したときにそれを実行したいと考えています。アップロードします。しかし、ここに問題があります:

Intent に指定されたすべてのコンストラクター...

Intent();
Intent(Intent );
Intent(String );
Intent(Context, Class<?>); //The one I always use
Intent(String, Uri );
Intent(String, Uri, Context, Class<?> );

...動作しません。私は FileObserver の拡張機能で作業しているため、Intent をフィードできる受け入れ可能なコンテキストがありません。IntentService を開始するために String のみを使用できる方法はありますか? 何も返す必要はありません。機能させるには、いくつかの文字列(ファイル名など)を入力するだけです。または、IntentServiceを開始できる別の方法があります。これは本当に私を困惑させました。

高度な助けをありがとう!

編集:わかりました。私は多くのコンテキストを試しましたが、どれもうまくいきません。インテント サービスは、呼び出されたときにコンストラクターを介して渡されるサービス クラスのアプリケーションまたは基本コンテキストによって起動されていません。私のアプリの基本的なレイアウトは次のとおりです。

ログイン アクティビティはメニュー アクティビティに移動し、メニュー アクティビティはサービスを開始し、サービスはサービス ハンドラーを開始します (それが何であるかを確認するには、Android ドキュメントのサービスの例を参照してください)、コンストラクターを介してコンテキストを渡します。サービス ハンドラーは FileSync を開始し、コンストラクターを介してコンテキストを渡します。FileSync は、クラス変数でコンテキストを保持します。次に、FileSync はファイルが変更されるまで待機し、コンテキストを使用して IntentService を開始し、Intent を通じて要求されたファイルをアップロードします。とても複雑なことは承知していますが、現時点ではこれしか方法がありません。

4

2 に答える 2

2

私は FileObserver の拡張機能で作業しているため、Intent をフィードできる受け入れ可能なコンテキストがありません。

これFileObserverは真空中に存在することはできません。アクティビティまたはサービスによって管理される必要があり、それによってContext.

于 2012-08-16T22:42:26.510 に答える
1

アプリケーションをオーバーライドすることで、アプリケーションの静的フィールドを作成できます。oncreateで

sInstance = this;

使用する

MyApplication.sInstance.startActivity(intent);

編集:FileObservverから情報を渡さずにサービスを開始するだけであれば、PendingIntentを使用できると考えて、 FileObserverの作成時にPendingIntentを作成して設定し、使用することができます。

pendingintent.send()

于 2012-08-16T22:38:58.613 に答える