-4

這裏是我的服務類如何可以運行它每次我如何開始我在啓動後臺服務的Android

public class SyncService extends Service { 

    private String loginUserInfoId = ""; 
    SessionManager session; 
    DatabaseHelper db; 
    MessageListActivity mLA; 
    String otherFileName = ""; 
    int timer = 3000; 


    long totalSize = 0; 

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

    @Override 
    public void onDestroy() { 
     super.onDestroy(); 
    } 

    @Override 
    public int onStartCommand(Intent intent, int flags, int startId) { 
     db = new DatabaseHelper(getApplicationContext()); 
     mLA = new MessageListActivity(); 

     session = new SessionManager(getApplicationContext()); 
     session.checkLogin(); 
     HashMap<String, String> user = session.getUserDetails(); 
     loginUserInfoId = user.get(SessionManager.KEY_USER_INFO_ID); 

     final Handler handler = new Handler(); 
     handler.postDelayed(new Runnable() { 
      @Override 
      public void run() { 
       SyncMessageFromServer(); 
      } 
     }, timer); 

     final Handler handlerT = new Handler(); 
     handlerT.postDelayed(new Runnable() { 
      @Override 
      public void run() { 
       SyncPendingMessageToServer(); 
      } 
     }, 5000); 

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

    @Override 
    public IBinder onBind(Intent arg0) { 
     return null; 
    } 

    private void SyncMessageFromServer() { 
     if(Config.isInternetOn(getApplicationContext()) && loginUserInfoId != "") { 
      String str = ""; 
      HttpResponse response; 
      HttpClient myClient = new DefaultHttpClient(); 
      HttpPost myConnection = new HttpPost(Config.HOST_NAME+"/AndroidApp/GetAllMessage/" + loginUserInfoId); 

      try { 
       response = myClient.execute(myConnection); 
       str = EntityUtils.toString(response.getEntity(), "UTF-8"); 

      } catch (ClientProtocolException e) { 
       e.printStackTrace(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 

      try { 
       JSONArray jArray = new JSONArray(str); 
       for (int i = 0; i <= jArray.length() - 1; i++) { 
        JSONObject row = jArray.getJSONObject(i); 
        if (row.getString("SenderUserId") != loginUserInfoId) { 
         ChatMessage cm = new ChatMessage(); 

         String currentDateTime = Config.GetCurrentDateTime(); 

         String fileType = ""; 
         String upFileURL = row.getString("FileAttachedURL").replace(" ", "%20"); 

         if (upFileURL.contains(".jpg") || upFileURL.contains(".png")) { 
          fileType = "IMAGE"; 
         } 
         else if (upFileURL.contains(".mp4")) { 
          fileType = "VIDEO"; 
         } 
         else if (upFileURL.contains(".mp3")) { 
          fileType = "AUDIO"; 
         } 
         else { 
          fileType = ""; 
         } 

         /******* Firstly take data in model object ******/ 
         cm.setOriginalMsgThreadId(row.getString("MessageThreadId")); 
         cm.setSenderUserInfoId(row.getString("SenderUserId")); 
         cm.setReceiverUserInfoId(row.getString("MultipleReceiversId")); 
         cm.setMessageStatus("SENT"); 
         cm.setIsPending(0); 
         cm.setIsPendingToUpdate(1); 
         cm.setMessageText(row.getString("MessageText")); 
         cm.setMediaURL(""); 
         cm.setOnlineMediaURL(Config.HOST_NAME + row.getString("FileAttachedURL").replace(" ", "%20")); 
         cm.setThumbImage(""); 
         cm.setIsDownloaded(0); 
         cm.setMediaMIMEType(fileType); 
         cm.setMediaSize(0); 
         cm.setMediaName(""); 
         cm.setLatitude(""); 
         cm.setLongitude(""); 
         cm.setSendTimeStamp(currentDateTime); 
         cm.setReceiveTimeStamp(""); 


         long messageId = db.SendMessage(cm); 
         //Log.d("MyService", "ChatMessageId = " + messageId); 
         Intent iMla = new Intent("REFRESH_DATA"); 
         iMla.putExtra("id", messageId); 
         //intent.putExtra("id", messageId); 
         sendBroadcast(iMla); 


         String notiAvatarURL = ""; 
         String notiUserName = ""; 
         List<ChatMessageThread> allChatMessageThread = db.GetMessageThreadsById(row.getString("SenderUserId")); 
         for (ChatMessageThread chatMessageThread : allChatMessageThread) { 

          notiAvatarURL = chatMessageThread.getMessageThreadAvatarURL(); 
          notiUserName = chatMessageThread.getMessageThreadTitle(); 

         } 
         if (row.getString("SenderUserId") != loginUserInfoId) { 
          displayNotificationMessage(row.getString("MessageText"), notiAvatarURL, notiUserName); 
         } 
         confirmSyncedToServer(row.getString("MessageId")); 
        } 
       } 
      } catch (JSONException e) { 
       e.printStackTrace(); 
      } 
     } 
     final Handler handler = new Handler(); 
     handler.postDelayed(new Runnable() { 
      @Override 
      public void run() { 
       SyncMessageFromServer(); 
       //SyncPendingMessageToServer(); 
      } 
     }, timer); 
    } 

    private void SyncPendingMessageToServer() { 
     //Toast.makeText(getApplicationContext(), "ToServer Run", Toast.LENGTH_LONG).show(); 
     if(Config.isInternetOn(getApplicationContext()) && loginUserInfoId != "") { 
      List<ChatMessage> allChatMessage = db.getAllMessage(); 
      for (ChatMessage chatMessage : allChatMessage) { 

       if (chatMessage.getIsPending() == 1 && chatMessage.getMediaMIMEType().isEmpty()) { 
        String msgText = chatMessage.getMessageText(); 

        HttpClient myClient = new DefaultHttpClient(); 
        HttpPost myConnection = new HttpPost(Config.HOST_NAME+"/AndroidApp/SendMessage"); 

        try { 
         List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2); 
         nameValuePairs.add(new BasicNameValuePair("messageText", msgText)); 
         nameValuePairs.add(new BasicNameValuePair("senderUserInfoId", chatMessage.getSenderUserInfoId())); 
         nameValuePairs.add(new BasicNameValuePair("recieverUserInfoId", chatMessage.getReceiverUserInfoId())); 
         nameValuePairs.add(new BasicNameValuePair("url", "")); 
         nameValuePairs.add(new BasicNameValuePair("isGroupMsg", "false")); 

         myConnection.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 
         myClient.execute(myConnection); 

        } catch (ClientProtocolException e) { 
         Toast.makeText(getApplicationContext(), "Message sending Failed!", Toast.LENGTH_LONG).show(); 
         //e.printStackTrace(); 
        } catch (IOException e) { 
         //e.printStackTrace(); 
        } 
       } 
      } 
      db.updateSyncedMessage(); 
     } 
     final Handler handler = new Handler(); 
     handler.postDelayed(new Runnable() { 
      @Override 
      public void run() { 
       SyncPendingMessageToServer(); 
      } 
     }, 10000); 
    } 

    public void confirmSyncedToServer(String messageId){ 
     HttpResponse response; 
     HttpClient myClient = new DefaultHttpClient(); 
     HttpPost myConnection = new HttpPost(Config.HOST_NAME+"/AndroidApp/MessageSynced/" + messageId); 

     try { 
      response = myClient.execute(myConnection); 

     } catch (ClientProtocolException e) { 
      Toast.makeText(getApplicationContext(),"message sending Failed!", Toast.LENGTH_LONG).show(); 
      //e.printStackTrace(); 
     } catch (IOException e) { 
      //e.printStackTrace(); 
     } 
    } 

    private void displayNotificationMessage(String message, String notiAvatarURL, String notiUserName) 
    { 
     NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this); 

     Bitmap bitmap = BitmapFactory.decodeFile(notiAvatarURL); 

     mBuilder.setSmallIcon(R.drawable.psklogo); 
     mBuilder.setLargeIcon(bitmap); 
     mBuilder.setContentTitle(notiUserName); 
     mBuilder.setContentText(message); 
     mBuilder.setVibrate(new long[] { 500, 500}); 
     mBuilder.setLights(Color.RED, 3000, 3000); 

     try { 
      Uri notification = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); 
      mBuilder.setSound(notification); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 

     Intent resultIntent = new Intent(this, MessageThreadActivity.class); 
     TaskStackBuilder stackBuilder = TaskStackBuilder.create(this); 
     stackBuilder.addParentStack(MessageThreadActivity.class); 

// Adds the Intent that starts the Activity to the top of the stack 
     stackBuilder.addNextIntent(resultIntent); 
     PendingIntent resultPendingIntent = 
       stackBuilder.getPendingIntent(
         0, 
         PendingIntent.FLAG_UPDATE_CURRENT 
       ); 
     mBuilder.setContentIntent(resultPendingIntent); 

     NotificationManager mNotificationManager = 
       (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); 

// notificationID allows you to update the notification later on. 
     mNotificationManager.notify(100, mBuilder.build()); 
    } 
} 
+0

參考時要啓動該服務? – 2015-04-01 06:33:54

+0

註冊一個偵聽啓動動作的接收器,並從該接收器啓動您的服務。在SO上搜索該接收器實現,有很多鏈接。 – 2015-04-01 06:35:21

回答

1

創建廣播接收器,並用它來接收ACTION_BOOT_COMPLETED。您還需要RECEIVE_BOOT_COMPLETED權限。

閱讀:監聽和廣播的全球信息,並設置警報

通過這個answer

+0

請你寄給我吧 – 2015-04-01 06:40:43

+0

我無法得到它請詳細寫下。 – 2015-04-01 06:42:51