2017-06-07 9 views
0

私はjavaを初めて使い、バックグラウンドでサービスを実行する方法を知りたいと思います。そのアクティビティが閉じられて再び開かれたとき、それはサービスと共に続けられます。私はそれを説明する方法を知らない。アクティビティを実行してサービスを提供する方法

各サービスが1時間ごとに実行される3つのサービスを想定します。

サービス1 ... 1時間...サービス2 ... 1時間...サービス3.終了しました。

実行されるたびに、テキストビューがアクティビティで表示されます。ただし、アクティビティが終了すると、テキストビューは作成されません。

サービス1以下の例に示すように、私が見つけた唯一の方法は、変数を使用してあった:

public int service_one_done = 1; 

サービス2:

public int service_two_done = 1; 

はサービス3:

public int service_three_done = 1; 

法ivityのonCreate:

if (service_one_done == 1) { textview_example1.setVisibility(View.VISIBLE) 
} if (service_two_done == 1) { textview_example2.setVisibility(View.VISIBLE) 
} if (service_three_done == 1) { textview_example3.setVisibility(View.VISIBLE) 
} 

私はこの

private static void sendMessageToActivity(Location l, String msg) { 
    Intent intent = new Intent("GPSLocationUpdates"); 
    // You can also include some extra data. 
    intent.putExtra("Status", msg); 
    Bundle b = new Bundle(); 
    b.putParcelable("Location", l); 
    intent.putExtra("Location", b); 
    LocalBroadcastManager.getInstance(context).sendBroadcast(intent); 
} 

とアクティビティ側で我々は持っていると書いた私のサービスクラスでは、この

+0

....私はこれをしなかった....私のコードで

あなたが欲しい、これまで何を実行するそのクラスのクラスです。方法;ブロードキャストレシーバを使ってみてください。そうすれば、アクティビティが実行されているときに、サービスによって送信されたブロードキャストを聴いてテキストビューを更新し、アクティビティが破棄されてもそれらのブロードキャストをリッスンしません。お役に立てれば – shadygoneinsane

答えて

0

を行うには良い方法があるかどうかを知りたいですこのブロードキャストメッセージを受信

LocalBroadcastManager.getInstance(getActivity()).registerReceiver(
      mMessageReceiver, new IntentFilter("GPSLocationUpdates")); 

このようにすると、メッセージをアクティビティに送信できます。ここmMessageReceiverより良いがたくさんrを

private BroadcastReceiver mMessageReceiver = new BroadcastReceiver() { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     // Get extra data included in the Intent 
     String message = intent.getStringExtra("Status"); 
     Bundle b = intent.getBundleExtra("Location"); 
     lastKnownLoc = (Location) b.getParcelable("Location"); 
     if (lastKnownLoc != null) { 
      tvLatitude.setText(String.valueOf(lastKnownLoc.getLatitude())); 
      tvLongitude 
        .setText(String.valueOf(lastKnownLoc.getLongitude())); 
      tvAccuracy.setText(String.valueOf(lastKnownLoc.getAccuracy())); 
      tvTimestamp.setText((new Date(lastKnownLoc.getTime()) 
        .toString())); 
      tvProvider.setText(lastKnownLoc.getProvider()); 
     } 
     tvStatus.setText(message); 
     // Toast.makeText(context, message, Toast.LENGTH_SHORT).show(); 
    } 
}; 

を参照here

関連する問題