gpt4 book ai didi

android - 如何在android中每12小时向android中的服务器发送一次数据?

转载 作者:行者123 更新时间:2023-11-30 02:09:05 26 4
gpt4 key购买 nike

您好,我正在开发一个 Android 应用程序,它将从用户手机中检索所有通话记录并将数据存储在 SQLite 数据库中。到这里我已经实现了,但现在我正在尝试将数据发送到我的 Remote 服务器每 12 小时发送一次。我已经创建了一个服务和一个广播接收器,但是如果检测到互联网连接,如何将数据发送到我的远程服务器?

这是我的服务类

    public class MyService extends Service {

String callNumber,deviceId;
int phoneType;
String possibleEmail;
Cursor c;
SQLiteDatabase db;

@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
return null;
}

@Override
public void onCreate() {
Toast.makeText(this, " MyService Created ", Toast.LENGTH_LONG).show();
}

@Override
public void onStart(Intent intent, int startId) {
Toast.makeText(this, " MyService Started", Toast.LENGTH_LONG).show();
getAllCallLogs();
}

@Override
public void onDestroy() {
// TODO Auto-generated method stub
Toast.makeText(this, "Servics Stopped", Toast.LENGTH_SHORT).show();
super.onDestroy();
}

private void getAllCallLogs(){

TelephonyManager tm = (TelephonyManager)getSystemService(TELEPHONY_SERVICE);

deviceId = tm.getDeviceId();
phoneType = tm.getPhoneType();

String strOrder = android.provider.CallLog.Calls.DATE + " DESC";
Cursor cur = getContentResolver().query(CallLog.Calls.CONTENT_URI, null, null, null, strOrder);
// loop through cursor
while (cur.moveToNext()) {
callNumber = cur.getString(cur
.getColumnIndex(android.provider.CallLog.Calls.NUMBER));

String callName = cur
.getString(cur
.getColumnIndex(android.provider.CallLog.Calls.CACHED_NAME));

String callDate = cur.getString(cur
.getColumnIndex(android.provider.CallLog.Calls.DATE));
SimpleDateFormat formatter = new SimpleDateFormat(
"dd-MMM-yyyy HH:mm:ss");
String dateString = formatter.format(new Date(Long
.parseLong(callDate)));

String callType = cur.getString(cur
.getColumnIndex(android.provider.CallLog.Calls.TYPE));

String type = null;
int type1 = Integer.parseInt(callType);

switch(type1){

case CallLog.Calls.OUTGOING_TYPE:
type = "OUTGOING";
break;

case CallLog.Calls.INCOMING_TYPE:
type = "INCOMING";
break;

case CallLog.Calls.MISSED_TYPE:
type = "MISSED";
break;
}
String duration = cur.getString(cur
.getColumnIndex(android.provider.CallLog.Calls.DURATION));

// process log data...
Toast.makeText(getApplicationContext(), ""+type, 5000).show();
db = this.openOrCreateDatabase("call_log", MODE_PRIVATE, null);
db.execSQL("insert into call_log(call_name,call_number,call_date,call_type,call_duration,device_id,user_name)values('"+callName+"','"+callNumber+"','"+dateString+"','"+type+"','"+duration+"','"+deviceId+"','"+possibleEmail+"')");
}

}

这是我的广播接收器类

   public class MyBroadcast extends BroadcastReceiver{

@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
if(isNetConnected(context)){
Toast.makeText(context, "Connected",5000).show();

}
else
{
Toast.makeText(context, "Not Connected", 5000).show();
}
}

public static boolean isNetConnected(Context context){
ConnectivityManager connectivity = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
if (connectivity != null)
{
NetworkInfo[] info = connectivity.getAllNetworkInfo();
if (info != null)
for (int i = 0; i < info.length; i++)
if (info[i].getState() == NetworkInfo.State.CONNECTED)
{
return true;
}

}
return false;
}

最佳答案

为此,您可以使用每 12 小时启动一次服务的 AlarmManager。在该服务中,您可以检查互联网连接,如果连接可用,则连接到服务器。例如:

     AlarmManager mgr = (AlarmManager) context
.getSystemService(Context.ALARM_SERVICE);
Intent notificationIntent = new Intent(context,
UpdateService.class);
PendingIntent pendingIntent=PendingIntent.getService(context, requestCode, Intent.parseIntent(), 0);
mgr.setInexactRepeating(AlarmManager.RTC_WAKEUP,
System.currentTimeMillis(), AlarmManager.INTERVAL_HALF_DAY, pendingIntent);

用于在移动启动时启动服务,创建一个 BroadcastReceiver 并注册它以接收 ACTION_BOOT_COMPLETED。您还需要 RECEIVE_BOOT_COMPLETED 权限。

public class MyReceiver extends BroadcastReceiver {   

@Override
public void onReceive(Context context, Intent intent) {
//register the alarm manager.
}
}

更多引用请浏览 API

关于android - 如何在android中每12小时向android中的服务器发送一次数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30365797/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com