2013-01-24 75 views
2

我設計了一個應用程序來幫助玉米農民識別疾病和錯誤問題,以更好地照顧他們的作物,並且我還整合了一個Twitter提要,允許他們看到最新的推文之一本地擴展服務代理。這些推文將讓農民知道已經報道或正在傳播的任何當地臭蟲/疾病問題,這樣農民就可以在問題變得嚴重之前做好自己的準備並希望能夠修復他們的莊稼。在Android中通知用戶新推文

我想知道的是我如何讓我的應用程序檢查新的推文並通知用戶。我使用「http://api.twitter.com/1/statuses/user_timeline.json」來獲取推文,所以我不認爲推送通知會起作用。這是可能的,還是有另一種方式來檢查並通知用戶?

tl; dr:我的應用程序如何通知用戶新的推文?

回答

1

你可以檢查的一種方法是輪詢,但這不是真的建議。你也可以用一些pub-sub機制來實現你自己的服務器。

但是,Twitter認識到這個用例並提供Streaming APIs。這將是實現你所談論的最好方式。

0

你可以試試下面的代碼。可能包含一些語法錯誤。

public class TwitterUpdater { 
    Context context; 
    public TwitterUpdate(Context ctx){ 
     context = ctx; 
     Timer timer = new Timer; 
     timer.scheduleAtFixedRate(new TwitterTask(), 0, 300000); 
    } 

} 

public class TwitterTask extends TimerTask{ 
    @Override 
    public void run() { 
     // TODO Auto-generated method stub 
     this.loadMessages(); 
    } 

} 
public void loadMessages(){ 
     StringBuilder builder = new StringBuilder(); 
     HostnameVerifier hostnameVerifier = org.apache.http.conn.ssl.SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER; 

      DefaultHttpClient client = new DefaultHttpClient(); 

      SchemeRegistry registry = new SchemeRegistry(); 
      SSLSocketFactory socketFactory = SSLSocketFactory.getSocketFactory(); 
      socketFactory.setHostnameVerifier((X509HostnameVerifier) hostnameVerifier); 
      registry.register(new Scheme("https", socketFactory, 443)); 
      SingleClientConnManager mgr = new SingleClientConnManager(client.getParams(), registry); 
      DefaultHttpClient httpClient = new DefaultHttpClient(mgr, client.getParams()); 

      // Set verifier  
      HttpsURLConnection.setDefaultHostnameVerifier(hostnameVerifier); 


     HttpGet httpGet = new HttpGet("https://api.twitter.com/1/statuses/user_timeline.json?include_entities=true&include_rts=true&screen_name=<Your twitter account name>"); 
     try { 
      HttpResponse response = httpClient.execute(httpGet); 
      StatusLine statusLine = response.getStatusLine(); 
      int statusCode = statusLine.getStatusCode(); 
      if (statusCode == 200) { 

      HttpEntity entity = response.getEntity(); 
      InputStream content = entity.getContent(); 
      BufferedReader reader = new BufferedReader(new InputStreamReader(content)); 
      String line; 
      while ((line = reader.readLine()) != null) { 
       builder.append(line); 
      } 
      JSONArray obj = new JSONArray(builder.toString()); 
      if (obj.getClass() == JSONArray.class){ 
       JSONArray results = obj; 
       for(int i = 0; i < results.length(); i++){ 
        JSONObject result = results.getJSONObject(i); 

        JSONObject user = result.getJSONObject("user"); 
        if(((String) user.get("screen_name")).compareToIgnoreCase("TNCVB")== 0){ 
         String name = user.getString("screen_name"); 
         String text =result.getString("text"); 
         String timestamp = result.getString("created_at"); 
         //Put them in an object and add to array or something 
        } 
       } 
      } 

       Intent nintent = new Intent(context, MyActivity.class); 
       PendingIntent pintent = PendingIntent.getActivity(context, 0, nintent, 0); 

       NotificationCompat.Builder mBuilder = 
         new NotificationCompat.Builder(context) 
         .setSmallIcon(R.drawable.ic_launcher) 
         .setContentTitle("Update") 
         .setContentIntent(pintent) 
         .setContentText("New messages are available."); 
       NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); 
       notificationManager.notify(007, mBuilder.build()); 
      } else { 
      Log.e("JSON Error:", "Failed to download file"); 
      } 
     } catch (ClientProtocolException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     }catch(Exception e){ 

     } 

    } 
}