如果在android studio 里面用button 记录时间段
时间: 2023-03-10 15:04:25 浏览: 83
我可以为你提供一些建议:1.在Android Studio中添加一个按钮,并使用System.currentTimeMillis()方法来记录当前的时间戳;2.使用DateFormat类来格式化时间段;3.使用Calendar类来计算时间段的起始和结束时间。
相关问题
利用android studio和java语言实现时间追踪功能
时间追踪功能可以通过Android中的计时器和定时器实现。以下是一个简单的示例代码:
1. 在布局文件中添加一个TextView和两个Button,分别用于开始和停止计时器:
```xml
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:id="@+id/tv_timer"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="30sp"
android:gravity="center_horizontal"
android:layout_gravity="center_horizontal"/>
<Button
android:id="@+id/btn_start"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Start"/>
<Button
android:id="@+id/btn_stop"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Stop"/>
</LinearLayout>
```
2. 在Java代码中定义计时器和定时器:
```java
public class MainActivity extends AppCompatActivity {
private TextView tvTimer;
private Button btnStart, btnStop;
private Timer timer;
private int seconds = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tvTimer = findViewById(R.id.tv_timer);
btnStart = findViewById(R.id.btn_start);
btnStop = findViewById(R.id.btn_stop);
btnStart.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startTimer();
}
});
btnStop.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
stopTimer();
}
});
}
private void startTimer() {
timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
runOnUiThread(new Runnable() {
@Override
public void run() {
seconds++;
tvTimer.setText(String.format("%02d:%02d:%02d",
seconds / 3600, (seconds % 3600) / 60, seconds % 60));
}
});
}
}, 0, 1000);
}
private void stopTimer() {
if (timer != null) {
timer.cancel();
timer = null;
seconds = 0;
tvTimer.setText("00:00:00");
}
}
}
```
在这段代码中,我们使用了Timer和TimerTask类来实现计时器。startTimer()方法用于启动计时器,每秒钟更新一次TextView中的时间。stopTimer()方法用于停止计时器,并重置时间为零。在这里我们使用了runOnUiThread()方法来确保UI更新在主线程上进行。
3. 在AndroidManifest.xml文件中添加必要的权限:
```xml
<uses-permission android:name="android.permission.WAKE_LOCK"/>
```
这是因为计时器需要保持屏幕唤醒状态,以便用户可以在运行计时器时查看屏幕。
现在,您可以运行应用程序并单击“Start”按钮开始计时器,单击“Stop”按钮停止计时器。请注意,此示例仅显示时间格式为HH:MM:SS,您可以根据需要进行更改。
用Android Studio写一个流量监控程序,可以在另一个界面实现分时间段查询流量使用情况和流量统计,发送完整代码
好的,以下是一个简单的流量监控程序的完整代码:
MainActivity.java
```
import android.content.Intent;
import android.net.TrafficStats;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
public class MainActivity extends AppCompatActivity {
private int uid;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
uid = android.os.Process.myUid();
}
public void onTimeButtonClick(View view) {
long startTime = System.currentTimeMillis() - 1000 * 60 * 60;
long endTime = System.currentTimeMillis();
long rxBytes = TrafficStats.getTotalRxBytes() - TrafficStats.getUidRxBytes(uid, startTime, endTime);
long txBytes = TrafficStats.getTotalTxBytes() - TrafficStats.getUidTxBytes(uid, startTime, endTime);
TextView text = findViewById(R.id.text);
text.setText("当前时间段内的流量使用情况:\n接收:" + rxBytes + " 字节\n发送:" + txBytes + " 字节");
}
public void onTotalButtonClick(View view) {
long totalRxBytes = TrafficStats.getTotalRxBytes();
long totalTxBytes = TrafficStats.getTotalTxBytes();
TextView text = findViewById(R.id.text);
text.setText("总的流量使用情况:\n接收:" + totalRxBytes + " 字节\n发送:" + totalTxBytes + " 字节");
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main_menu, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.menu_statistics:
Intent intent = new Intent(this, StatisticsActivity.class);
startActivity(intent);
return true;
default:
return super.onOptionsItemSelected(item);
}
}
}
```
activity_main.xml
```
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="16dp"
tools:context=".MainActivity">
<TextView
android:id="@+id/text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="16dp"
android:textSize="18sp" />
<Button
android:id="@+id/time_button"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="16dp"
android:text="时间段查询"
android:onClick="onTimeButtonClick" />
<Button
android:id="@+id/total_button"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="总流量查询"
android:onClick="onTotalButtonClick" />
</LinearLayout>
```
StatisticsActivity.java
```
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.View;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
import androidx.appcompat.app.AppCompatActivity;
public class StatisticsActivity extends AppCompatActivity {
private SQLiteDatabase db;
private SimpleCursorAdapter adapter;
private ListView listView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_statistics);
listView = findViewById(R.id.list_view);
db = new TrafficStatisticsDbHelper(this).getWritableDatabase();
Cursor cursor = db.rawQuery("SELECT * FROM traffic_statistics ORDER BY id DESC", null);
adapter = new SimpleCursorAdapter(this, R.layout.list_item, cursor,
new String[] { "start_time", "end_time", "rx_bytes", "tx_bytes" },
new int[] { R.id.text1, R.id.text2, R.id.text3, R.id.text4 }, 0);
listView.setAdapter(adapter);
}
public void onClearButtonClick(View view) {
db.delete("traffic_statistics", null, null);
adapter.changeCursor(db.rawQuery("SELECT * FROM traffic_statistics ORDER BY id DESC", null));
}
}
```
activity_statistics.xml
```
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="16dp">
<ListView
android:id="@+id/list_view"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:divider="#cccccc"
android:dividerHeight="1dp"
android:padding="16dp"
android:textSize="18sp" />
<Button
android:id="@+id/clear_button"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="清空记录"
android:onClick="onClearButtonClick" />
</LinearLayout>
```
list_item.xml
```
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:padding="8dp">
<TextView
android:id="@+id/text1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="18sp" />
<TextView
android:id="@+id/text2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="18sp"
android:layout_marginStart="16dp" />
<TextView
android:id="@+id/text3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="18sp"
android:layout_marginStart="16dp" />
<TextView
android:id="@+id/text4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="18sp"
android:layout_marginStart="16dp" />
</LinearLayout>
```
TrafficStatisticsDbHelper.java
```
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
public class TrafficStatisticsDbHelper extends SQLiteOpenHelper {
private static final int DATABASE_VERSION = 1;
private static final String DATABASE_NAME = "traffic_statistics.db";
public TrafficStatisticsDbHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE traffic_statistics (" +
"id INTEGER PRIMARY KEY AUTOINCREMENT, " +
"start_time INTEGER, " +
"end_time INTEGER, " +
"rx_bytes INTEGER, " +
"tx_bytes INTEGER" +
")");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
```
注意:为了让代码更加清晰,省略了一些异常处理和注释。在实际开发中,请务必添加适当的异常处理和注释。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)