2013-05-12 44 views
0

在我的服务中,值每隔1秒更新一次。在活动中使用运行服务结果

Timer timer = new Timer(); 
    timer.scheduleAtFixedRate( 
       new java.util.TimerTask() { 
        @Override 
        public void run() { 
         if(Serve.Connecting){ 
          tv = (TextView)findViewById(R.id.textView1); 
           tv.setText("Connecting"); 
           ProgressBar PB = (ProgressBar) findViewById(R.id.progressBar1); 
           PB.setProgress(25); 
         } 
         if(Serve.Connected){ 
          tv = (TextView)findViewById(R.id.textView1); 
           tv.setText("Connected"); 
           ProgressBar PB = (ProgressBar) findViewById(R.id.progressBar1); 
           PB.setProgress(50); 
         } 
         if(Serve.Connected && Serve.loading.FALSE){ 
          tv = (TextView)findViewById(R.id.textView1); 
           tv.setText("Loading"); 
          ProgressBar PB = (ProgressBar) findViewById(R.id.progressBar1); 
          PB.setProgress(75); 
         } 
         if(Serve.Connected && Serve.loading){ 
          tv = (TextView)findViewById(R.id.textView1); 
           tv.setText("Done"); 
           ProgressBar PB = (ProgressBar) findViewById(R.id.progressBar1); 
           PB.setProgress(100); 
           Intent intent = new Intent(Loadingpage.this, Setup.class); 
           startActivity(intent); 
           finish(); 
           frstscr=false; 

         } 



      }}, 
      200, 500 
      ); 

,但它没有工作,所以我使用该处理器的示例尝试:正在运行的活动,所以我不能更新.tried在活动使用的定时器的新成果和更新textviews或功能运行一次

private Handler handler = new Handler(); 
runnable.run(); 

    private Runnable runnable = new Runnable() 
{ 

public void run() 
{ 
    // 
    // Do the stuff 
    // 

    handler.postDelayed(this, 1000); 
}}; 

但没有工作,任何想法? 我甚至使用while(frstscrn){fun}其中frstscrn是布尔值,标识该活动正在运行

+0

您是否调用handler.post(runnable)? – pskink 2013-05-12 11:39:40

+0

是不是通过调用该行runnable.run(); ?? – 2013-05-12 11:41:57

回答

0

您的活动将是这个样子..

import android.app.Activity; 
import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.content.IntentFilter; 
import android.os.Bundle; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.Toast; 

public class GenerateBroadcastActivity extends Activity 
{ 
    Button bt ; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.generate_broadcast); 

     bt = (Button) findViewById(R.id.bt1); 
     bt.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       startService(new Intent(getApplicationContext(),MyNewService.class)); 
      } 
     }); 
    } 

    @Override 
    protected void onPause() { 
     super.onPause(); 
     unregisterReceiver(receiver); 
    } 

    @Override 
    protected void onResume() { 
     super.onResume(); 
     registerReceiver(receiver, new IntentFilter("BROADCAST_UNIQUE_NAME")); 
    } 

    private BroadcastReceiver receiver = new BroadcastReceiver() { 
     @Override 
     public void onReceive(Context context, Intent intent) { 

      //take out data from intent 
       int progressValue = intent.getIntExtra("progressValue",0); 

      // just for instance , you can set the progress in your progress bar //defined globally in your app 
       progressBar.setProgress(progressValue); 

      Toast.makeText(context, "Broadcast coming with Progress value" + progressValue, Toast.LENGTH_LONG).show();   
     } 
    }; 
} 

写下您服务像这样的类...

import android.app.IntentService; 
import android.app.Notification; 
import android.app.NotificationManager; 
import android.app.PendingIntent; 
import android.content.Intent; 
import android.util.Log; 

public class MyNewService extends IntentService 
{ 

    public MyNewService() 
    { 
     super("Service Name");  
    } 

    @Override 
    protected void onHandleIntent(Intent intent) 
    { 
     //Do some background task . 
      int progressValue = 20 ; 

     //Send broadcast like this 
     Intent broadcast = new Intent(); 
     // name should be same as specified in your activity class onResume method 
     broadcast.setAction("BROADCAST_UNIQUE_NAME"); 
     //send extra data with your broadcast 
     broadcast.putExtra("progressValue",progressValue); 
     //send it now 
     sendBroadcast(broadcast); 
    } 
} 

这个广播将被广播接收器接收,你将在屏幕上收到一条消息。请参考此链接了解基础知识:http://www.edureka.in/blog/android-tutorials-broadcast-receivers/

+0

所以我不得不将服务更改为一个IntentService,我要试试这个.......谢谢很多 – 2013-05-12 12:14:13

+0

即使您使用服务而不是IntentService,它也能正常工作。您根据您的要求更改类型。 IntentService在执行onHandleIntent()内部的代码后停止,而服务可能会继续运行,取决于onStartCommand()方法中给出的返回值。例如:返回STICKY; – 2013-05-12 12:18:32

+0

好的,谢谢,我使用的服务,因为我需要它一直在运行和重复 – 2013-05-12 12:27:49

0

在您的活动中有一个意图,并通过代码进行注册。

从你的服务,通过广播的意图,然后将值发送更新的值从onReceive()更新UI组件

+0

对不起,但我是新来的android会你给我看一个简单的例子..在此先感谢 – 2013-05-12 11:38:44

相关问题