将传入的whatsapp通知存储到本地数据库

Posted

技术标签:

【中文标题】将传入的whatsapp通知存储到本地数据库【英文标题】:storing incoming whatsapp notifications to local database 【发布时间】:2018-04-07 09:10:15 【问题描述】:

我正在构建一个 android 应用程序,它将监听 whatsapp 通知并将其存储并显示...我已经使用 notificationlistenerService 来执行此操作...我能够收听所有 whatsapp 通知我的问题是当我重新启动时我的应用程序列表中的所有数据都丢失了;(所以我想将其保存在数据库中......以及如何在后台运行我的应用程序我是新手(菜鸟)任何帮助任何建议表示赞赏

o/p

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 = sbn.getNotification().tickerText.toString();
    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;

    String text = null;
    if (extras.getCharSequence("android.text") != null) 
        text = extras.getCharSequence("android.text").toString();
    
    if (text == null) 
        if (extras.get("android.textLines") != null) 
            CharSequence[] charText = (CharSequence[]) extras
                    .get("android.textLines");
            if (charText.length > 0) 
                text = charText[charText.length - 1].toString();
            
        
    

    // Log.i("Package",pack);
    // Log.i("Ticker",ticker);
    // Log.i("Title",title);
    // Log.i("Text",text);

    if(pack.equals("com.whatsapp")) 
        Intent msgrcv = new Intent("Msg");
      //  msgrcv.putExtra("package", pack);
        msgrcv.putExtra("ticker", ticker);
        msgrcv.putExtra("title", title);
        msgrcv.putExtra("text", text);
        if (id !=null) 
         //  if (text.equals("This message was deleted"))
          //     text="some messages may be deleted";
           //    msgrcv.putExtra("text", text);
          // 
            ByteArrayOutputStream stream = new ByteArrayOutputStream();
            id.compress(Bitmap.CompressFormat.PNG, 100, stream);
            byte[] byteArray = stream.toByteArray();
            msgrcv.putExtra("icon", byteArray);

            LocalBroadcastManager.getInstance(context).sendBroadcast(msgrcv);
        
     else
        return;
    


@Override
public void onNotificationRemoved(StatusBarNotification sbn) 
    Log.i("Msg","Notification Removed");


【问题讨论】:

【参考方案1】:

其实,这并不难。 但是,作为初学者(正如你所说的那样)理解这是一个漫长的过程。

我会带你去一个sqlite在android [tutorial link]中的数据库教程。

基本上你可以使用任何其他数据库,但我建议从 sqlite 开始。

本教程解释的是如何为 sql 连接创建某种wrapper(辅助类)。

public class DatabaseHelper extends SQLiteOpenHelper 

// Database Version
private static final int DATABASE_VERSION = 1;

// Database Name
private static final String DATABASE_NAME = "notes_db";


public DatabaseHelper(Context context) 
    super(context, DATABASE_NAME, null, DATABASE_VERSION);


// Creating Tables
@Override
public void onCreate(SQLiteDatabase db) 

    // create notes table
    db.execSQL(Note.CREATE_TABLE);


// Upgrading database
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) 
    // Drop older table if existed
    db.execSQL("DROP TABLE IF EXISTS " + Note.TABLE_NAME);

    // Create tables again
    onCreate(db);
 

此帮助程序类将帮助您与本地 sqlite 数据库进行交互。

【讨论】:

嗨@PrincEVergil,如果这个或任何答案已经解决了您的问题,请考虑通过单击复选标记接受它。这向更广泛的社区表明您已经找到了解决方案,并为回答者和您自己提供了一些声誉。没有义务这样做。 嗨@FlyingNades我需要更多帮助,因为你说使用sqlite db我尝试做......但现在我面临新问题如何将位图图像存储到sqlite数据库link你可以吗?帮帮我 @PrincEVergil 我现在正在工作,请尝试发布有关您的问题的新问题。如果您希望我稍后在那里回复,您可以给我发消息。

以上是关于将传入的whatsapp通知存储到本地数据库的主要内容,如果未能解决你的问题,请参考以下文章

使用前台应用程序检测本地通知的点击,swift 4

在 iOS 级别本地更改远程推送通知的声音

将所有从“Firebase 推送通知”接收的消息存储在移动数据库/本地

Flutter 本地通知 int id 参数

接收到本地通知数据后如何创建使用目标 c 传递给主视图控制器?

本地存储和 JSON