2011-02-21 10 views
6

मैं बस स्टेटस बार में सिंक आइकन शुरू करना और बंद करना चाहता हूं। मैंने सोचा कि यह अधिसूचना प्रबंधक का उपयोग करके एक साधारण कॉल होगा, लेकिन मुझे वेब या एसओ पर प्रलेखन या नमूना Q & ए नहीं मिल रहा है।एंड्रॉइड सिंक स्थिति आइकन कैसे एनिमेट करता है?

उत्तर

5

मैं अपने जवाब मिला ...

http://libs-for-android.googlecode.com/svn-history/r46/trunk/src/com/google/android/accounts/AbstractSyncService.java

यह सेट और stat_notify_sync आइकन रद्द करने के तरीके को दर्शाता है।

private void showNotification(String authority) { 
    Object service = getSystemService(NOTIFICATION_SERVICE); 
    NotificationManager notificationManager = (NotificationManager) service; 
    int icon = android.R.drawable.stat_notify_sync; 
    String tickerText = null; 
    long when = 0; 
    Notification notification = new Notification(icon, tickerText, when); 
    Context context = this; 
    CharSequence contentTitle = "mobi"; //createNotificationTitle(); 
    CharSequence contentText = "bob"; //createNotificationText(); 
    PendingIntent contentIntent = createNotificationIntent(); 
    notification.when = System.currentTimeMillis(); 
    notification.flags |= Notification.FLAG_ONGOING_EVENT; 
    notification.setLatestEventInfo(context, contentTitle, contentText, contentIntent); 
    notificationManager.notify(mNotificationId, notification); 
} 

private void cancelNotification() { 
    Object service = getSystemService(NOTIFICATION_SERVICE); 
    NotificationManager nm = (NotificationManager) service; 
    nm.cancel(mNotificationId); 
} 
+1

लिंक टूट गया है ... – HGPB

+0

@Haraldo: उदाहरण के लिए, और हाल ही में अधिसूचना निर्माता का उपयोग करके, आप की तरह कुछ का उपयोग करेंगे। मुझे एक प्रतिस्थापन लिंक मिला, उम्मीद है कि यह हमेशा के लिए मान्य होगा। – mobibob

+0

लिंक टूटा हुआ है ... – Arjun

4

आपके उदाहरण के लिए धन्यवाद, यह मुझे कुछ समय बचाता है। मैंने अपने आवेदन में एक स्थिर विधि बनाई है, इसलिए मैं आसानी से आइकन को अपने कोड में कहीं से भी चालू/बंद कर सकता हूं। मैं अभी भी इसे एनिमेट करने के लिए नहीं मिल सकता है।

MyApplication.java में:

private static Context context; 
private static NotificationManager nm; 

public void onCreate(){ 
     context = getApplicationContext(); 
     nm = (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE); 
... 
} 

public static void setNetworkIndicator(boolean state) {  
    if (state == false) { 
     nm.cancel(NETWORK_ACTIVITY_ID); 
     return; 
    } 

    PendingIntent contentIntent = PendingIntent.getActivity(context, 0, new Intent(), PendingIntent.FLAG_UPDATE_CURRENT); 
    Notification n = new Notification(android.R.drawable.stat_notify_sync, null, System.currentTimeMillis()); 
    n.setLatestEventInfo(context, "SMR7", "Network Communication", contentIntent); 
    n.flags |= Notification.FLAG_ONGOING_EVENT; 
    n.flags |= Notification.FLAG_NO_CLEAR; 
    nm.notify(NETWORK_ACTIVITY_ID, n); 
} 

और फिर अपने आवेदन में कहीं से भी:

MyApplication.setNetworkIndicator(true); 

MyApplication.setNetworkIndicator(false); 
+0

मुझे इस समाधान पर आपकी क्लीन-अप शैली पसंद है। – mobibob

+0

नेटवर्क्स_एक्टिविटी_आईडी क्या है? – NicoGranelli

+0

@NicoGranelli - NETWORK_ACTIVITY_ID मेरी स्थिति झंडे की पहचान करने के लिए मेरी अनूठी आईडी है। आप इसे किसी भी मूल्य पर सेट कर सकते हैं क्योंकि यह आपके नामस्थान में है। – mobibob

5

प्राप्त करने के लिए एक एनिमेटेड समन्वय आइकन आप android.R.drawable.ic_popup_sync चिह्न का उपयोग कर सकते हैं। - अच्छा पकड़

Notification notification = new NotificationCompat.Builder(mContext) 
     .setContentTitle("my-title") 
     .setContentText("Loading...") 
     .setSmallIcon(android.R.drawable.ic_popup_sync) 
     .setWhen(System.currentTimeMillis()) 
     .setOngoing(true) 
.build(); 
संबंधित मुद्दे