2011-11-10 13 views
13

私のアプリケーションでは、一定の間隔の後にテキストメッセージをユーザーに送信する必要があります。そのためには、バックグラウンドでコードを送信するメッセージを実行する必要があります。私は特定の時間に活動を開始するためにアラームマネージャーを使用しています。何をするのですか?これを行う別の方法がありますか?Androidでバックグラウンドでアクティビティを実行する方法

答えて

20

基本的にUIレスのアクティビティであるServicesを調べることができます。

+0

私が行う必要があるものは何でもタスクのために、バックグラウンドでの活動(ないサービス)を実行することが可能である場合には、ビーコンの監視は、我々はバックグラウンド – Prasad

+0

@kaspermoerchでの活動を実行することができますしてくださいので、機能していないサービスでは、あなたが答えてくださいだろうか?私は必死に、必死に活動が必要です。 – rightaway717

+0

サービスは、許可をリクエストしたい場合に役立ちます。( – Sharpe

0

はい。これを達成するためにサービスを使用する必要があります。明示的に閉じるまでバックグラウンドで実行できます。

は、Androidの許可使用しています:名= "android.permission.ACCESS_BACKGROUND_SERVICE"

を IntentServiceこれは... マニフェストAndroidにこれを追加。..役立つかもしれない別の代替

http://developer.android.com/guide/topics/fundamentals/services.html

+0

androidのサービスを使用するための適切なチュートリアルを提供してください。 – picaso

+3

developer.android.comの文書をお読みください。 – drooooooid

1

サービスを使用するのではなく、サービスを使用しない場合(これが必要な場合もあります)、通常の方法でアクティビティを開始してから、アクティビティのonCreateで送信しましたmoveTaskToBack(true)を呼び出してバックグラウンドに移動します。

は、あなたがこの方法を使用する場合、それがバックグラウンドに自分自身を送信する必要があるのonCreateに認識できるように、あなたは、あなたが活動を開始したことにより、意思に余分な情報を追加する必要がありますSending a running application to background programmatically

を参照してください。これを行うには、IntentのputExtraメソッドを呼び出します。アクティビティのonCreateでは、getIntentを使用してIntentを呼び出し、getStringExtraを使用してそこに格納された情報を取得します(たとえば、追加の文字列を使用しました)。 Intentクラスのドキュメントを参照してください。

0

この目的を達成するためにサービスを使用することをお勧めしますが、別のアプリから何かが必要なときに同様の状況が発生しました。サービスの意図はエクスポートされませんでした。サービスを開始することは、活動を開始することです - そして、私のアプリにユーザーを残すために、私は自分の活動をフォアグラウンドで維持する必要があります。 その場合はAsyncTaskで他のアクティビティを開始してからonPostExecute自分自身を再開することができます。

(new AsyncTask<Void, Void, Void>() { 
     boolean starting = false; 
     @Override 
     protected Void doInBackground(Void... params) { 
      if(!externalServiceRunning()){ 
       Intent externalIntent = getPackageManager().getLaunchIntentForPackage("com.external..."); 
       if (externalIntent != null) { 
        starting = true; 
        startActivity(externalIntent); 
       } 
      } 
      return null; 
     } 

     @Override 
     protected void onPostExecute(Void aVoid) { 
      if(starting) { 
       Intent myApp = getPackageManager().getLaunchIntentForPackage("com.my.myapp"); 
       if (myApp != null) { 
        startActivity(myApp); 
       } 
      } 
     } 
    }).execute(); 
関連する問題