2016-04-10 21 views
2

Webからコンテンツをダウンロードするサービスを作成したいのですが、実行中に進捗ダイアログを表示したいと考えています。 AsynctaskとVolleyの進捗状況ダイアログを使用する方法はわかっていますが、ここではわかりません。サービスを使用しているときにサービス終了に関するUIスレッドについて通知できます。Android - サービスの実行中に進捗状況ダイアログを表示する方法

どうすればこの問題を解決できますか?

コードが

public class MainActivity extends Activity { 

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

} 

public void onClickStart(View v) { 
    startService(new Intent(this, MyService.class)); 
} 

public void onClickStop(View v) { 
    stopService(new Intent(this, MyService.class)); 
} 

} 


public class MyService extends Service { 

    public void onCreate() { 
    super.onCreate(); 
    } 

    public int onStartCommand(Intent intent, int flags, int startId) { 
    Log.d(LOG_TAG, "onStartCommand"); 
    someTask(); 
    return super.onStartCommand(intent, flags, startId); 
    } 

    public void onDestroy() { 
    super.onDestroy(); 
    } 

    public IBinder onBind(Intent intent) { 
    return null; 
    } 

    void someTask() { 
    new Thread(new Runnable() { 
     public void run() { 
     for (int i = 1; i<=5; i++) { 
      Log.d(LOG_TAG, "i = " + i); 
      try { 
      TimeUnit.SECONDS.sleep(1); 
      } catch (InterruptedException e) { 
      e.printStackTrace(); 
      } 
     } 
     stopSelf(); 
     } 
    }).start(); 
    } 
+1

サービスについては、通知を表示する必要があります。 –

答えて

1

あなたのサービスからプログレスバーを表示または非表示にしたいときブロードキャストメッセージを作成します。

Intent i = new Intent("yourPackage.SHOW_Progress"); 
sendBroadcast(i); 

をその後、放送受信機を作成し、受信したメッセージハンドル:

public class MyReceiver extends BroadcastReceiver{ 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     MainActivity mainActivity = ((MyApplication) context.getApplicationContext()).mainActivity; 
     mainActivity.showProgress(); 
    } 

} 

とあなたのmainActivity内部のためのメソッドを作成プログレスバーを表示または非表示にする

+0

返信いただきありがとうございます!質問 - インテント内の引数( "yourPackage.SHOW_Progress")は必須ですか、かっこの中にすべてがある可能性がありますか?インセントの引数に応じて、onReceive内の特別なインテントを参照できますか? –

+0

インテント内のインテントは、インテントのアクションです。あなたが気に入っているすべてのものにすることができますが、マニフェストファイルレシーバーセクションに登録する引数と同じでなければなりません。** 2 **あなたは1つのブロードキャストインテントを送信し、あなたが望むアクション –

+0

ありがとう!あなたは私の保護者です! –

0

に従っているサービスとアクティビティの間で通信するためのさまざまな方法があります。

サービスからブロードキャストを送信し、ブロードキャストレシーバでアクティビティで処理することができます。

サービスをバインドして、サービスのタスクが終了したらコマンドを返すこともできます。