信息的通知栏上的消息具体要看MessagingNotification.java这个类
看看里getMmsNewMessageNotificationInfo()和getSmsNewMessageNotificationInfo()你就知道你想的东西是怎么来的了,
notify看了不解决问题呀

解决方案 »

  1.   

    这个,真做不了.
    通知管理器只能发送通知.不能取得通知.
    android系统也是为了安全性考虑要是你可以取得别的程序的通知和通知里面的东西.
    那岂不是就可以更改里面的内容,并且可以修改将要跳转的地方.
    那样我就可以点击qq动听的通知,跳到我自己写的程序的上面.
    这样会出现大量病毒,木马,流氓软件.android系统安全度还是不错的.对于你说的这个功能只能无能为力了
      

  2.   

    我也在做这个,需求和你一样的,拿到系统通知栏的消息内容。这两天在看SystemUI的源码。里面内容太多了,头痛中
      

  3.   


    我在做单词推送!可以试试AccessibilityService
      

  4.   

    用 AccessibilityService 可以搞定,当收到新通知以后,可以获取到通知,但是获取不到以前的通知
    package com.example.notify;import android.accessibilityservice.AccessibilityService;
    import android.accessibilityservice.AccessibilityServiceInfo;
    import android.annotation.TargetApi;
    import android.os.Build;
    import android.os.Bundle;
    import android.speech.tts.TextToSpeech;
    import android.view.accessibility.AccessibilityEvent;
    import android.view.accessibility.AccessibilityNodeInfo;import java.util.Iterator;
    import java.util.List;
    import java.util.Locale;public class MService extends AccessibilityService implements TextToSpeech.OnInitListener {
        TextToSpeech speech;
        boolean mTextToSpeechInitialized = false;    @TargetApi(Build.VERSION_CODES.KITKAT)
        @Override
        public void onAccessibilityEvent(AccessibilityEvent event) {
            System.out.println("***** onAccessibilityEvent");
            if (event.getPackageName().equals(getPackageName())) {
                return;
            }
            if (!mTextToSpeechInitialized) {
                return;
            }
            System.out.println("pkgname " + event.getPackageName());
            System.out.println("classname " + event.getClassName());
            System.out.println("action      : " + event.getAction());
            List<CharSequence> text = event.getText();
            StringBuilder builder = new StringBuilder();
            for (int i = 0; i < text.size(); i++) {
                builder.append(text.get(i));
                System.out.println("t " + text.get(i));
            }
            speech.speak(builder.toString(), TextToSpeech.QUEUE_FLUSH, null);        AccessibilityNodeInfo source = event.getSource();
            if (source == null) {
                System.out.println(" null ");
                return;
            }
            System.out.println("count " + source.getChildCount());
            Bundle extras = source.getExtras();
            Iterator<String> iterator = extras.keySet().iterator();
            while (iterator.hasNext()) {
                String next = iterator.next();
                Object obj = extras.get(next);
                System.out.println(" . " + next + " . " + obj);
            }    }    @Override
        public void onInterrupt() {
            System.out.println("-----------interrupt");
        }    @Override
        public void onServiceConnected() {
            System.out.println("----------connect");
            speech = new TextToSpeech(getApplicationContext(), this);
            AccessibilityServiceInfo info = new AccessibilityServiceInfo();
            info.eventTypes = AccessibilityEvent.TYPE_NOTIFICATION_STATE_CHANGED;
            info.notificationTimeout = 100;
            info.feedbackType = AccessibilityServiceInfo.FEEDBACK_ALL_MASK;
            setServiceInfo(info);
        }    @Override
        public void onInit(int status) {
            if (status == TextToSpeech.SUCCESS) {
                speech.setLanguage(Locale.US);
                mTextToSpeechInitialized = true;
            }
        }
    }<?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android = "http://schemas.android.com/apk/res/android"
              package = "com.example.notify"
              android:versionCode = "1"
              android:versionName = "1.0" >    <uses-sdk
                android:minSdkVersion = "8"
                android:targetSdkVersion = "21" />
        <application
                android:label = "@string/app_name"
                android:icon = "@drawable/ic_launcher" >
            <activity
                    android:name = "MyActivity"
                    android:label = "@string/app_name" >
                <intent-filter >
                    <action android:name = "android.intent.action.MAIN" />
                    <category android:name = "android.intent.category.LAUNCHER" />
                </intent-filter >
            </activity >
            <service
                    android:name = ".MService"
                    android:permission = "android.permission.BIND_ACCESSIBILITY_SERVICE" >
                <intent-filter >
                    <action android:name = "android.accessibilityservice.AccessibilityService" />
                </intent-filter >        </service >
        </application >
    </manifest >
      

  5.   

    用 AccessibilityService 可以搞定,当收到新通知以后,可以获取到通知,但是获取不到以前的通知
    package com.example.notify;import android.accessibilityservice.AccessibilityService;
    import android.accessibilityservice.AccessibilityServiceInfo;
    import android.annotation.TargetApi;
    import android.os.Build;
    import android.os.Bundle;
    import android.speech.tts.TextToSpeech;
    import android.view.accessibility.AccessibilityEvent;
    import android.view.accessibility.AccessibilityNodeInfo;import java.util.Iterator;
    import java.util.List;
    import java.util.Locale;public class MService extends AccessibilityService implements TextToSpeech.OnInitListener {
        TextToSpeech speech;
        boolean mTextToSpeechInitialized = false;    @TargetApi(Build.VERSION_CODES.KITKAT)
        @Override
        public void onAccessibilityEvent(AccessibilityEvent event) {
            System.out.println("***** onAccessibilityEvent");
            if (event.getPackageName().equals(getPackageName())) {
                return;
            }
            if (!mTextToSpeechInitialized) {
                return;
            }
            System.out.println("pkgname " + event.getPackageName());
            System.out.println("classname " + event.getClassName());
            System.out.println("action      : " + event.getAction());
            List<CharSequence> text = event.getText();
            StringBuilder builder = new StringBuilder();
            for (int i = 0; i < text.size(); i++) {
                builder.append(text.get(i));
                System.out.println("t " + text.get(i));
            }
            speech.speak(builder.toString(), TextToSpeech.QUEUE_FLUSH, null);        AccessibilityNodeInfo source = event.getSource();
            if (source == null) {
                System.out.println(" null ");
                return;
            }
            System.out.println("count " + source.getChildCount());
            Bundle extras = source.getExtras();
            Iterator<String> iterator = extras.keySet().iterator();
            while (iterator.hasNext()) {
                String next = iterator.next();
                Object obj = extras.get(next);
                System.out.println(" . " + next + " . " + obj);
            }    }    @Override
        public void onInterrupt() {
            System.out.println("-----------interrupt");
        }    @Override
        public void onServiceConnected() {
            System.out.println("----------connect");
            speech = new TextToSpeech(getApplicationContext(), this);
            AccessibilityServiceInfo info = new AccessibilityServiceInfo();
            info.eventTypes = AccessibilityEvent.TYPE_NOTIFICATION_STATE_CHANGED;
            info.notificationTimeout = 100;
            info.feedbackType = AccessibilityServiceInfo.FEEDBACK_ALL_MASK;
            setServiceInfo(info);
        }    @Override
        public void onInit(int status) {
            if (status == TextToSpeech.SUCCESS) {
                speech.setLanguage(Locale.US);
                mTextToSpeechInitialized = true;
            }
        }
    }<?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android = "http://schemas.android.com/apk/res/android"
              package = "com.example.notify"
              android:versionCode = "1"
              android:versionName = "1.0" >    <uses-sdk
                android:minSdkVersion = "8"
                android:targetSdkVersion = "21" />
        <application
                android:label = "@string/app_name"
                android:icon = "@drawable/ic_launcher" >
            <activity
                    android:name = "MyActivity"
                    android:label = "@string/app_name" >
                <intent-filter >
                    <action android:name = "android.intent.action.MAIN" />
                    <category android:name = "android.intent.category.LAUNCHER" />
                </intent-filter >
            </activity >
            <service
                    android:name = ".MService"
                    android:permission = "android.permission.BIND_ACCESSIBILITY_SERVICE" >
                <intent-filter >
                    <action android:name = "android.accessibilityservice.AccessibilityService" />
                </intent-filter >        </service >
        </application >
    </manifest >
    其实这样获得只是Notification类的tikerText属性,tikerText专门用于辅助服务(如文字转语音之类),和真正的消息内容是有区别的