信息的通知栏上的消息具体要看MessagingNotification.java这个类
看看里getMmsNewMessageNotificationInfo()和getSmsNewMessageNotificationInfo()你就知道你想的东西是怎么来的了,
notify看了不解决问题呀
看看里getMmsNewMessageNotificationInfo()和getSmsNewMessageNotificationInfo()你就知道你想的东西是怎么来的了,
notify看了不解决问题呀
通知管理器只能发送通知.不能取得通知.
android系统也是为了安全性考虑要是你可以取得别的程序的通知和通知里面的东西.
那岂不是就可以更改里面的内容,并且可以修改将要跳转的地方.
那样我就可以点击qq动听的通知,跳到我自己写的程序的上面.
这样会出现大量病毒,木马,流氓软件.android系统安全度还是不错的.对于你说的这个功能只能无能为力了
我在做单词推送!可以试试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 >
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专门用于辅助服务(如文字转语音之类),和真正的消息内容是有区别的