android studio 项目,用于保存 flash 消息和通知

android studio project to save flash messages and notification

我已经看过基本的 android 工作室教程,现在我想开发可以保存即时消息和通知的应用程序。有人请告诉我如何这样做并提供有用的链接

This link 有帮助。

  1. NotificationService.java

    包 android.notifications;
    导入 android.app.Notification;
    导入 android.content.Context;
    导入 android.content.Intent;
    导入 android.graphics.Bitmap;
    导入 android.os.Bundle;
    导入 android.service.notification.NotificationListenerService;
    导入 android.service.notification.StatusBarNotification;
    导入 android.util.Log;
    导入 android.support.v4.content.LocalBroadcastManager;
    导入 java.io.ByteArrayOutputStream;

    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;  
    ArrayList<model> modelList;  

    @Override  
    protected void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.activity_main);  
        modelList = new ArrayList<model>();  
        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<model>();  
                    modelList.add(model);  
                    adapter = new CustomListAdapter(getApplicationContext(), modelList);  
                    list=(ListView)findViewById(R.id.list);  
                    list.setAdapter(adapter);  
                }  

            } catch (Exception e) {  
                e.printStackTrace();  
            }  
        }  
    };  
}  
  1. AndroidManifest.xml

    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>