Android:如何从服务中获取int值并在活动的文本视图中设置

Android:如何从服务中获取int值并在活动的文本视图中设置,android,android-service,Android,Android Service,我的应用程序在他的服务中有一个24小时的倒计时。并在TextView中显示时间,即使用户离开应用程序 在服务时,我输入了一个整数=5184000。这是24小时转换为毫秒 问题: public class MainActivity extends Activity { TextView tv; BroadcastReceiver broad; @Override protected void onCreate(Bundle savedInstanceState) { super.onC

我的应用程序在他的服务中有一个24小时的倒计时。并在
TextView
中显示时间,即使用户离开应用程序

在服务时,我输入了一个整数=5184000。这是24小时转换为毫秒

问题:

public class MainActivity extends Activity {

TextView tv;
BroadcastReceiver broad;

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

    tv = (TextView) findViewById(R.id.textView1);

    Intent intent = new Intent(this, MyService.class);
    startService(intent);

    registerReceiver(broad, new IntentFilter(MyService.BROADCAST_ACTION));


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

            Intent intent1 = getIntent();
            Bundle bundle = intent1.getExtras();
            if (bundle != null) {
                int data = bundle.getInt("DDDD");
                tv.setText(data);
            } else {
                tv.setText("00:00:00");
            }
        }

     };
}
public class MyService extends Service {

CountDownTimer cdt = null;
Intent intent1;
int h = 5184000;

public static final String BROADCAST_ACTION = "com.example.service";


@Override
public void onCreate() {
    super.onCreate();

}

@Override
public void onDestroy() {

    cdt.cancel();
    Log.i("DDD", "Timer cancelled");
    super.onDestroy();
}

@Override
public int onStartCommand(Intent intent, int flags, int startId) {



    Log.i("TIME", "Starting timer...");

    cdt = new CountDownTimer(h, 1000) {
        @Override
        public void onTick(long millisUntilFinished) {

            Log.i("TIME", "secondes: " + millisUntilFinished);

            intent1 = new Intent(BROADCAST_ACTION);
            intent1.putExtra("T", h);
            sendBroadcast(intent1);

        }

        @Override
        public void onFinish() {
            Log.i("TIME", "Timer finished");
        }
    };

    cdt.start();

    return super.onStartCommand(intent, flags, startId);
}

@Override
public IBinder onBind(Intent arg0) {
    return null;
 }
}
<TextView
    android:id="@+id/textView1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentTop="true"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="134dp"
    android:text="00:00:00"
    android:textAppearance="?android:attr/textAppearanceLarge" />
  • TextView
    活动中不显示时间
  • 我想知道当计时器等于00:00:00时,计时器重置,新时间等于23:59:59
  • main活动:

    public class MainActivity extends Activity {
    
    TextView tv;
    BroadcastReceiver broad;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    
        tv = (TextView) findViewById(R.id.textView1);
    
        Intent intent = new Intent(this, MyService.class);
        startService(intent);
    
        registerReceiver(broad, new IntentFilter(MyService.BROADCAST_ACTION));
    
    
        broad = new BroadcastReceiver() {
            @Override
            public void onReceive(Context context, Intent intent) {
    
                Intent intent1 = getIntent();
                Bundle bundle = intent1.getExtras();
                if (bundle != null) {
                    int data = bundle.getInt("DDDD");
                    tv.setText(data);
                } else {
                    tv.setText("00:00:00");
                }
            }
    
         };
    }
    
    public class MyService extends Service {
    
    CountDownTimer cdt = null;
    Intent intent1;
    int h = 5184000;
    
    public static final String BROADCAST_ACTION = "com.example.service";
    
    
    @Override
    public void onCreate() {
        super.onCreate();
    
    }
    
    @Override
    public void onDestroy() {
    
        cdt.cancel();
        Log.i("DDD", "Timer cancelled");
        super.onDestroy();
    }
    
    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
    
    
    
        Log.i("TIME", "Starting timer...");
    
        cdt = new CountDownTimer(h, 1000) {
            @Override
            public void onTick(long millisUntilFinished) {
    
                Log.i("TIME", "secondes: " + millisUntilFinished);
    
                intent1 = new Intent(BROADCAST_ACTION);
                intent1.putExtra("T", h);
                sendBroadcast(intent1);
    
            }
    
            @Override
            public void onFinish() {
                Log.i("TIME", "Timer finished");
            }
        };
    
        cdt.start();
    
        return super.onStartCommand(intent, flags, startId);
    }
    
    @Override
    public IBinder onBind(Intent arg0) {
        return null;
     }
    }
    
    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="134dp"
        android:text="00:00:00"
        android:textAppearance="?android:attr/textAppearanceLarge" />
    
    服务:

    public class MainActivity extends Activity {
    
    TextView tv;
    BroadcastReceiver broad;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    
        tv = (TextView) findViewById(R.id.textView1);
    
        Intent intent = new Intent(this, MyService.class);
        startService(intent);
    
        registerReceiver(broad, new IntentFilter(MyService.BROADCAST_ACTION));
    
    
        broad = new BroadcastReceiver() {
            @Override
            public void onReceive(Context context, Intent intent) {
    
                Intent intent1 = getIntent();
                Bundle bundle = intent1.getExtras();
                if (bundle != null) {
                    int data = bundle.getInt("DDDD");
                    tv.setText(data);
                } else {
                    tv.setText("00:00:00");
                }
            }
    
         };
    }
    
    public class MyService extends Service {
    
    CountDownTimer cdt = null;
    Intent intent1;
    int h = 5184000;
    
    public static final String BROADCAST_ACTION = "com.example.service";
    
    
    @Override
    public void onCreate() {
        super.onCreate();
    
    }
    
    @Override
    public void onDestroy() {
    
        cdt.cancel();
        Log.i("DDD", "Timer cancelled");
        super.onDestroy();
    }
    
    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
    
    
    
        Log.i("TIME", "Starting timer...");
    
        cdt = new CountDownTimer(h, 1000) {
            @Override
            public void onTick(long millisUntilFinished) {
    
                Log.i("TIME", "secondes: " + millisUntilFinished);
    
                intent1 = new Intent(BROADCAST_ACTION);
                intent1.putExtra("T", h);
                sendBroadcast(intent1);
    
            }
    
            @Override
            public void onFinish() {
                Log.i("TIME", "Timer finished");
            }
        };
    
        cdt.start();
    
        return super.onStartCommand(intent, flags, startId);
    }
    
    @Override
    public IBinder onBind(Intent arg0) {
        return null;
     }
    }
    
    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="134dp"
        android:text="00:00:00"
        android:textAppearance="?android:attr/textAppearanceLarge" />
    
    xml:

    public class MainActivity extends Activity {
    
    TextView tv;
    BroadcastReceiver broad;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    
        tv = (TextView) findViewById(R.id.textView1);
    
        Intent intent = new Intent(this, MyService.class);
        startService(intent);
    
        registerReceiver(broad, new IntentFilter(MyService.BROADCAST_ACTION));
    
    
        broad = new BroadcastReceiver() {
            @Override
            public void onReceive(Context context, Intent intent) {
    
                Intent intent1 = getIntent();
                Bundle bundle = intent1.getExtras();
                if (bundle != null) {
                    int data = bundle.getInt("DDDD");
                    tv.setText(data);
                } else {
                    tv.setText("00:00:00");
                }
            }
    
         };
    }
    
    public class MyService extends Service {
    
    CountDownTimer cdt = null;
    Intent intent1;
    int h = 5184000;
    
    public static final String BROADCAST_ACTION = "com.example.service";
    
    
    @Override
    public void onCreate() {
        super.onCreate();
    
    }
    
    @Override
    public void onDestroy() {
    
        cdt.cancel();
        Log.i("DDD", "Timer cancelled");
        super.onDestroy();
    }
    
    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
    
    
    
        Log.i("TIME", "Starting timer...");
    
        cdt = new CountDownTimer(h, 1000) {
            @Override
            public void onTick(long millisUntilFinished) {
    
                Log.i("TIME", "secondes: " + millisUntilFinished);
    
                intent1 = new Intent(BROADCAST_ACTION);
                intent1.putExtra("T", h);
                sendBroadcast(intent1);
    
            }
    
            @Override
            public void onFinish() {
                Log.i("TIME", "Timer finished");
            }
        };
    
        cdt.start();
    
        return super.onStartCommand(intent, flags, startId);
    }
    
    @Override
    public IBinder onBind(Intent arg0) {
        return null;
     }
    }
    
    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="134dp"
        android:text="00:00:00"
        android:textAppearance="?android:attr/textAppearanceLarge" />
    

    您可以使用报警管理器进行此操作

    查看AlarmManager的以下链接


    5184000。这是24小时转换为毫秒不,它是not@njzk2你能告诉我为什么不能吗?你的广播接收器的onReceive被触发了吗?“你有没有试着在那里放一个演讲点?@Anuj不,我没有放,我不知道广播。请编辑我的代码。因为以毫秒为单位的24小时根本不是5184000。我看不出有什么好解释的