Witam.
Mam taki oto kod:
package pl.danek.gielda;
import java.util.ArrayList;
import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.ServiceConnection;
import android.os.Bundle;
import android.os.IBinder;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ProgressBar;
import android.widget.TextView;
public class MainActivity extends Activity {
public static final String ACTION_NEW_MSG = "1";
public static final String MSG_FIELD_RED = "message";
public static final String MSG_FIELD_BLUE = "message1";
public static final String MSG_FIELD_GREEN = "message2";
public static final String MSG_FIELD_RED_M = "message4";
public static final String MSG_FIELD_BLUE_M = "message5";
public static final String MSG_FIELD_GREEN_M = "message6";
public static final String MSG_FIELD_PROGRESS = "progress";
public static final String MSG_FIELD_MONEY = "money";
private TextView red,blue,green,money,myRed,myBlue,myGreen;
private Button blueP,blueM,greenP,greenM,redP,redM;
private ProgressBar update;
private MyReceiver myReceiver;
private MyService myService;
private OnClickListener listener;
private ServiceConnection serviceConnection = new ServiceConnection() {
@Override
public void onServiceDisconnected(ComponentName name) {
myService = null;
}
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
MyService.MyBinder binder = (MyService.MyBinder)service;
myService = binder.getMyService();
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initReceiver();
initText();
initButton();
initService();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.newGame:
finishService();
initService();
break;
default:
}
return true;
}
private void initText(){
red=(TextView)findViewById(R.id.red);
blue=(TextView)findViewById(R.id.Blue);
green=(TextView)findViewById(R.id.green);
money=(TextView)findViewById(R.id.money);
myRed=(TextView)findViewById(R.id.redMine);
myBlue=(TextView)findViewById(R.id.blueMine);
myGreen=(TextView)findViewById(R.id.greenMine);
update = (ProgressBar)findViewById(R.id.toNextUpdate);
update.setMax(30);
}
private void initButton(){
listener = new OnClickListener() {
@Override
public void onClick(View v) {
myService.buttonClicked(v);
}
};
blueP=(Button)findViewById(R.id.blueP);
blueP.setOnClickListener(listener);
blueM=(Button)findViewById(R.id.blueM);
blueM.setOnClickListener(listener);
greenP=(Button)findViewById(R.id.greenP);
greenP.setOnClickListener(listener);
greenM=(Button)findViewById(R.id.greenM);
greenM.setOnClickListener(listener);
redP=(Button)findViewById(R.id.redM);
redP.setOnClickListener(listener);
redM=(Button)findViewById(R.id.redP);
redM.setOnClickListener(listener);
}
public void setMyProgress(int p){
update.setProgress(p);
}
private void initService() {
Intent intent = new Intent(this, MyService.class);
bindService(intent, serviceConnection, Context.BIND_AUTO_CREATE);
startService(intent);
}
private void finishService() {
Intent intent = new Intent(this, MyService.class);
unbindService(serviceConnection);
stopService(intent);
}
@Override
protected void onDestroy(){
super.onDestroy();
finishReceiver();
// finishService();
}
private void finishReceiver() {
unregisterReceiver(myReceiver);
}
private void initReceiver() {
myReceiver = new MyReceiver();
IntentFilter filter = new IntentFilter(ACTION_NEW_MSG);
registerReceiver(myReceiver, filter);
}
public class MyReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(ACTION_NEW_MSG)) {
String g = intent.getStringExtra(MSG_FIELD_GREEN);
String b = intent.getStringExtra(MSG_FIELD_BLUE);
String r = intent.getStringExtra(MSG_FIELD_RED);
String mg = intent.getStringExtra(MSG_FIELD_GREEN_M);
String mb = intent.getStringExtra(MSG_FIELD_BLUE_M);
String mr = intent.getStringExtra(MSG_FIELD_RED_M);
String m = intent.getStringExtra(MSG_FIELD_MONEY);
red.setText(r);
blue.setText(b);
green.setText(g);
myRed.setText(mr);
myBlue.setText(mb);
myGreen.setText(mg);
money.setText(m);
update.setProgress(Integer.parseInt(intent.getStringExtra(MSG_FIELD_PROGRESS)));
}
}
}
}
package pl.danek.gielda;
import java.util.Timer;
import java.util.TimerTask;
import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.os.Binder;
import android.os.IBinder;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
public class MyService extends Service{
private int update;
Context context = this;
Timer timer;
private Game game;
private final IBinder iBinder = new MyBinder();
public class MyBinder extends Binder {
MyService getMyService() {
return MyService.this;
}
}
@Override
public IBinder onBind(Intent intent) {
return iBinder;
}
@Override
public void onCreate() {
super.onCreate();
game = new Game();
sevice();
}
@Override
public void onDestroy() {
timer.cancel();
super.onDestroy();
}
private void sevice(){
update=0;
timer = new Timer();
TimerTask timerTask = new TimerTask(){
public void run() {
update++;
Intent intent = new Intent(MainActivity.ACTION_NEW_MSG);
intent.putExtra(MainActivity.MSG_FIELD_RED, game.getRed() +"");
intent.putExtra(MainActivity.MSG_FIELD_BLUE, game.getBlue() +"");
intent.putExtra(MainActivity.MSG_FIELD_GREEN, game.getGreen() +"");
intent.putExtra(MainActivity.MSG_FIELD_RED_M, game.getMyRed() +"");
intent.putExtra(MainActivity.MSG_FIELD_BLUE_M, game.getMyBlue() +"");
intent.putExtra(MainActivity.MSG_FIELD_GREEN_M, game.getMyGreen() +"");
intent.putExtra(MainActivity.MSG_FIELD_PROGRESS, update+"");
intent.putExtra(MainActivity.MSG_FIELD_MONEY, game.getMoney()+"");
sendBroadcast(intent);
if (update>29) {
game.update();
update=0;
}
}};
timer.scheduleAtFixedRate(timerTask , 100, 1000);
}
public void showToast(String text){
Toast.makeText(getApplicationContext(), text, Toast.LENGTH_SHORT).show();
}
public void buttonClicked(View v){
switch (v.getId()) {
case R.id.blueP:
if(canBuy(game.getBlue())){
game.buy('b');
}
break;
case R.id.redP:
if(canBuy(game.getRed())){
game.buy('r');
}
break;
case R.id.greenP:
if(canBuy(game.getGreen())){
game.buy('g');
}
break;
case R.id.blueM:
if(canSell(game.getMyBlue())){
game.sell('b');
}
break;
case R.id.redM:
if(canSell(game.getMyRed())){
game.sell('r');
}
break;
case R.id.greenM:
if(canSell(game.getMyGreen())){
game.sell('g');
}
break;
default:
break;
}
}
private boolean canSell(int myShare){
if(myShare<1){
showToast("Not enough share");
return false;
}else return true;
}
private boolean canBuy(int price){
if(price>game.getMoney()){
showToast("Not enough money");
return false;
}else return true;
}
}
package pl.danek.gielda;
import java.util.Random;
public class Game {
private int red,green,blue,money,myRed,myGreen,myBlue;
private int[] tab = {blue,green,red};
private Random r;
public Game(){
for (int i = 0; i < tab.length; i++) {
tab[i]=100;
}
r= new Random();
money=100;
}
public int getRed(){
return tab[2];
}
public int getGreen(){
return tab[1];
}
public int getBlue(){
return tab[0];
}
public int getMoney(){
return money;
}
public void changeMoney(int x){
money+=x;
}
public int getMyRed(){
return myRed;
}
public int getMyBlue(){
return myBlue;
}
public int getMyGreen(){
return myGreen;
}
public void update(){
for (int i=0;i<tab.length;++i){
tab[i]+=r.nextInt(7)-3;
if(tab[i]<0)
tab[i]=0;
}
}
public void buy(char i){
switch (i) {
case 'b':
money-=tab[0];
myBlue++;
break;
case 'g':
money-=tab[1];
myGreen++;
break;
case 'r':
money-=tab[2];
myRed++;
break;
default:
break;
}
}
public void sell(char i){
switch (i) {
case 'b':
money+=tab[0];
myBlue--;
break;
case 'g':
money+=tab[1];
myGreen--;
break;
case 'r':
money+=tab[2];
myRed--;
break;
default:
break;
}
}
}
Nie czepiajcie sie klasy Game bo jest ona pisana na szybko w celach testowych ;)
Dlaczego co jakiś czas service sie zatrzymuje? (zainstalowalem na swoim tel i co jakis czas sie resetuje)
dodanie znaczników <code class="java"> - fp