如何在 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
你好,我正在开发一个 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