0

私のサービスでは、値は 1 秒ごとに更新されます。実行中のアクティビティは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
           );

しかし、うまくいかなかったので、そのハンドラーの例を使用してみました:

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 は、アクティビティが実行中であることを識別するブール値です。

4

2 に答える 2

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/

于 2013-05-12T12:03:34.520 に答える
0

アクティビティに意図を持ち、コードで登録します。

サービスから、インテントをブロードキャストして更新された値を送信し、onReceive()値を更新して UI コンポーネントに送信します。

于 2013-05-12T11:36:00.177 に答える