Hello Friends,
Today, I am going to share a small tutorial on android "NotificationListenerService"
which help us to read the all app notifications. This tutorial covers following
points.
Feature:
1. We can easily read the notification of other android application or read all status bar
notification,
2. Read|Listen incoming whatsapp messages
3. Read all incoming SMS
4. Read all incoming calls
5. Battery Low
Step1 : Create a Notification Service Class :
This class extends NotificationListenerService class which contains
two method:
a) onNotificationPosted(StatusBarNotification sbn) :
Implement this method to learn about new notifications as they are
posted by apps.
b) onNotificationRemoved(StatusBarNotification sbn) :
Implement this method to learn when notifications are removed.
Note: The StatusBarNotifcation object contains extras, app package name and
ticker name
1. NotificationService.java
2.MainActivity.java
4. Android check Notification Access Setting is enable or not:
Download Complete Code From Here : NotificationListener
Hope, this will helps someone.
Enjoy Coding .... :)
Today, I am going to share a small tutorial on android "NotificationListenerService"
which help us to read the all app notifications. This tutorial covers following
points.
Feature:
1. We can easily read the notification of other android application or read all status bar
notification,
2. Read|Listen incoming whatsapp messages
3. Read all incoming SMS
4. Read all incoming calls
5. Battery Low
Step1 : Create a Notification Service Class :
This class extends NotificationListenerService class which contains
two method:
a) onNotificationPosted(StatusBarNotification sbn) :
Implement this method to learn about new notifications as they are
posted by apps.
b) onNotificationRemoved(StatusBarNotification sbn) :
Implement this method to learn when notifications are removed.
Note: The StatusBarNotifcation object contains extras, app package name and
ticker name
1. NotificationService.java
package android.notifications; import android.app.Notification; import android.content.Context; import android.content.Intent; import android.graphics.Bitmap; import android.os.Bundle; import android.service.notification.NotificationListenerService; import android.service.notification.StatusBarNotification; import android.util.Log; import android.support.v4.content.LocalBroadcastManager; import java.io.ByteArrayOutputStream; /** * Created by mukesh on 19/5/15. */ public class NotificationService extends NotificationListenerService { Context context; @Override public void onCreate() { super.onCreate(); context = getApplicationContext(); } @Override public void onNotificationPosted(StatusBarNotification sbn) { String pack = sbn.getPackageName(); String ticker =""; if(sbn.getNotification().tickerText !=null) { ticker = sbn.getNotification().tickerText.toString(); } Bundle extras = sbn.getNotification().extras; String title = extras.getString("android.title"); String text = extras.getCharSequence("android.text").toString(); int id1 = extras.getInt(Notification.EXTRA_SMALL_ICON); Bitmap id = sbn.getNotification().largeIcon; Log.i("Package",pack); Log.i("Ticker",ticker); Log.i("Title",title); Log.i("Text",text); Intent msgrcv = new Intent("Msg"); msgrcv.putExtra("package", pack); msgrcv.putExtra("ticker", ticker); msgrcv.putExtra("title", title); msgrcv.putExtra("text", text); if(id != null) { ByteArrayOutputStream stream = new ByteArrayOutputStream(); id.compress(Bitmap.CompressFormat.PNG, 100, stream); byte[] byteArray = stream.toByteArray(); msgrcv.putExtra("icon",byteArray); } LocalBroadcastManager.getInstance(context).sendBroadcast(msgrcv); } @Override public void onNotificationRemoved(StatusBarNotification sbn) { Log.i("Msg","Notification Removed"); } }
2.MainActivity.java
package android.notifications; import android.app.Activity; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.os.Bundle; import android.support.v4.content.LocalBroadcastManager; import android.view.Menu; import android.view.MenuItem; import android.widget.ListView; import java.util.ArrayList; /** * Created by mukesh on 19/5/15. */ public class MainActivity extends Activity { ListView list; CustomListAdapter adapter; ArrayList3. AndroidManifest.xmlmodelList; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); modelList = new ArrayList (); adapter = new CustomListAdapter(getApplicationContext(), modelList); list=(ListView)findViewById(R.id.list); list.setAdapter(adapter); LocalBroadcastManager.getInstance(this).registerReceiver(onNotice, new IntentFilter("Msg")); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.menu_main, menu);//Menu Resource, Menu return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.action_settings: Intent intent = new Intent( "android.settings.ACTION_NOTIFICATION_LISTENER_SETTINGS"); startActivity(intent); return true; default: return super.onOptionsItemSelected(item); } } private BroadcastReceiver onNotice= new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { // String pack = intent.getStringExtra("package"); String title = intent.getStringExtra("title"); String text = intent.getStringExtra("text"); //int id = intent.getIntExtra("icon",0); Context remotePackageContext = null; try { // remotePackageContext = getApplicationContext().createPackageContext(pack, 0); // Drawable icon = remotePackageContext.getResources().getDrawable(id); // if(icon !=null) { // ((ImageView) findViewById(R.id.imageView)).setBackground(icon); // } byte[] byteArray =intent.getByteArrayExtra("icon"); Bitmap bmp = null; if(byteArray !=null) { bmp = BitmapFactory.decodeByteArray(byteArray, 0, byteArray.length); } Model model = new Model(); model.setName(title +" " +text); model.setImage(bmp); if(modelList !=null) { modelList.add(model); adapter.notifyDataSetChanged(); }else { modelList = new ArrayList (); modelList.add(model); adapter = new CustomListAdapter(getApplicationContext(), modelList); list=(ListView)findViewById(R.id.list); list.setAdapter(adapter); } } catch (Exception e) { e.printStackTrace(); } } }; }
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="android.notifications"> <uses-permission android:name="android.permission.RECEIVE_SMS" /> <uses-permission android:name="android.permission.READ_SMS" /> <uses-permission android:name="android.permission.READ_PHONE_STATE"/> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme"> <activity android:name="android.notifications.MainActivity" android:configChanges="keyboardHidden|orientation|screenSize" 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="android.notifications.NotificationService" android:label="@string/app_name" android:permission="android.permission.BIND_NOTIFICATION_LISTENER_SER VICE"> <intent-filter> <action android:name="android.service.notification.NotificationLi stenerService" /> </intent-filter> </service> <receiver android:name="android.notifications.IncomingSms"> <intent-filter> <action android:name="android.provider.Telephony.SMS_RECEIVED" /> </intent-filter> </receiver> <receiver android:name=".ServiceReceiver" > <intent-filter> <action android:name="android.intent.action.PHONE_STATE" /> </intent-filter> </receiver> </application> </manifest>
4. Android check Notification Access Setting is enable or not:
//check notification access setting is enabled or not public static boolean checkNotificationEnabled() { try{ if(Settings.Secure.getString(MainActivity.mActivity.getContentResolver(), "enabled_notification_listeners").contains(App.getContext().getPackageName())) { return true; } else { return false; } }catch(Exception e) { e.printStackTrace(); } return false; }
Download Complete Code From Here : NotificationListener
Hope, this will helps someone.
Enjoy Coding .... :)