NotificationListenerService Mise En Œuvre
Je suis en train de mettre en œuvre NotificationListnerService qui est ajouté dans android 4.3, mais je ne suis pas en mesure d'obtenir les détails de la notification.
Mon code comme ci-dessous
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this);
mBuilder.setSmallIcon(R.drawable.ic_launcher);
mBuilder.setContentTitle("notification test");
mBuilder.setContentText("Notification text");
mBuilder.setAutoCancel(true);
Intent resultIntent = new Intent(this, ResultActivity.class);
TaskStackBuilder stackBuilder = TaskStackBuilder.create(this);
//Adds the back stack for the Intent (but not the Intent itself)
stackBuilder.addParentStack(ResultActivity.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 manager = (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);
manager.notify(1, mBuilder.build());
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
//Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
public class NotificationListenerTesting extends NotificationListenerService{
public static String TAG = "NotificationListenerTesting";
//private StatusBarNotification[] mStatusBarNotification;
@Override
public void onCreate(){
super.onCreate();
Log.d(TAG, "Inside on create");
}
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onNotificationPosted(StatusBarNotification sbn) {
TAG = "onNotificationPosted";
Log.d(TAG, "id = " + sbn.getId() + "Package Name" + sbn.getPackageName() +
"Post time = " + sbn.getPostTime() + "Tag = " + sbn.getTag());
}
@Override
public void onNotificationRemoved(StatusBarNotification sbn) {
TAG = "onNotificationRemoved";
Log.d(TAG, "id = " + sbn.getId() + "Package Name" + sbn.getPackageName() +
"Post time = " + sbn.getPostTime() + "Tag = " + sbn.getTag());
}
}
Android fichier manifeste est
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.notificationtest"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="18" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.example.notificationtest.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name="com.example.notificationtest.ResultActivity"></activity>
<service android:name="com.example.notificationtest.NotificationListenerTesting"
android:label="notification"
android:permission="android.permission.BIND_NOTIFICATION_LISTENER_SERVICE">
<intent-filter>
<action android:name="android.service.notification.NotificationListenerService"/>
</intent-filter>
</service>
</application>
</manifest>
mais après la notification cliquez sur ou sur notification post NotificationListenerService n'est pas appelé , Quoi de mal dans ce ou ai-je raté quelque chose ? Comment la mettre en œuvre ?
Qu'en est minSdkVersion="8"? NotificationListenerService exige de l'API de niveau 18.
Il nécessite, mais ils ont fourni le support pour les anciennes version trop
Ont-ils vraiment fourni un support pour les anciennes versions trop parce que je ne pouvais pas le trouver n'importe où. Pouvez-vous svp me guider quelque part ou me dire vous-même comment cela peut être fait? J'ai été chercher cette de très nombreux jours. Je serais vraiment reconnaissant de toute aide.
Il nécessite, mais ils ont fourni le support pour les anciennes version trop
Ont-ils vraiment fourni un support pour les anciennes versions trop parce que je ne pouvais pas le trouver n'importe où. Pouvez-vous svp me guider quelque part ou me dire vous-même comment cela peut être fait? J'ai été chercher cette de très nombreux jours. Je serais vraiment reconnaissant de toute aide.
OriginalL'auteur Naga | 2013-07-29
Vous devez vous connecter pour publier un commentaire.
À l'intérieur de la NotificationListenerService vous avez besoin d'un looper pour communiquer avec le thread GUI de sorte que vous pouvez créer une émission pour gérer l'interface graphique de l'interaction.
Espère cette exemple va vous aider.
Quelqu'un peut-il donner des précisions sur les personnes à mettre en œuvre de tels looper? Merci.
OriginalL'auteur Basbous
Vous devez accorder l'accès à votre application pour lire les notifications:
"Paramètres > > Avis de l'accès" et cochez la case de votre application.
Meilleure façon est d'appeler l'intention de soulever cette écran et de dire à l'utilisateur de cocher la case sur le prochain écran
consultez nos ma réponse: stackoverflow.com/a/37081128/252308
Au moins dans les versions plus récentes de l'option dans Paramètres > Sons et notifications -> la Notification de l'accès
merci beaucoup vous avez sauvé mon temps 🙂
OriginalL'auteur Dayerman
Au moins un problème avec votre code, c'est que votre mise en œuvre de onBind()
Il n'y a pas de nécessité de remplacer cette méthode. Mais si vous devez, alors, au moins, de retour de la IBinder renvoyé par la super-classe.
OriginalL'auteur Harshal Pradhan
Il serait peut-être un peu tard. Mais il y a quelques mois j'ai aussi eu du mal avec prise de NotificationListenerService travail.
Depuis lors, j'ai appris à mettre en œuvre et se sentait comme la construction d'une mise en œuvre tutoriel pour aider les autres qui ont vécu la même chose que moi
Si quelqu'un est intéressé, vérifiez le projet ici:
https://github.com/Chagall/notification-listener-service-example
Espère que cela aide quelqu'un qui est aux prises avec elle.
OriginalL'auteur Chagallkhan
Je sais que c'est trop tard pour répondre à la question , mais comme je n'étais pas en mesure de trouver les Paramètres > Sons et notifications -> la Notification de l'accès, j'ai donc directement à permettre l'accès des notifications sur mon application, en tirant à cette intention:
startActivity(new Intent(Paramètres.ACTION_NOTIFICATION_LISTENER_SETTINGS));
OriginalL'auteur Anupriya
J'ai rencontré le même problème et ont trouvé quelques indices pour que.
NotificationListenerService
ne peut pas être en cours d'exécution, à moins que vous appelezbindService()
pour le démarrer.Parfois, il démarre automatiquement lorsque vous activez l'option "Notification d'accès" et parfois il ne l'est pas.
De toute façon à s'assurer qu'il reliabily commencé ?
OriginalL'auteur
La notification que vous créez n'est pas "tickerText." J'ai trouvé que si la notification n'a pas tickerText, onNotificationPosted n'est pas appelé.
Dans votre code ajouter mBuilder.setTicker( "votre texte ici" ).
onNotificationPosted devrait maintenant être appelé en supposant que le reste de la NotificationListenerService est copacetic.
OriginalL'auteur user2836021
Je suis en train de faire la même chose que dans GitHub, mais je ne vais pas entrer dans la classe de notification.
OriginalL'auteur Dinesh VG