如何在 android 每 12 小时向服务器发送数据 android?

How to send data to server in android for every 12 hours in android?

你好,我正在开发一个 android 应用程序,它将从用户手机中检索所有通话记录并将数据存储在 SQLite database.Till 中,我已经实现了,但现在我尝试每 12 hours.I 创建一个服务和一个广播接收器就将数据发送到我的远程服务器,但是如果检测到互联网连接,如何将数据发送到我的远程服务器?

这是我的服务class

    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+"')");
    }

} 

这是我的广播接收器class

   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*60*60.

有说明和代码示例: https://developer.android.com/training/scheduling/alarms.html

您可以安排任务。参考下面link,我想它会对你有所帮助。

Scheduling recurring task in Android

为此,您可以使用每 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