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

android studio项目用于保存flash消息和通知,android,notifications,save,Android,Notifications,Save,我已经看过基本的android studio教程,现在我想开发一个可以保存flash消息和通知的应用程序。有人请告诉我怎么做,并提供有用的链接 NotificationService.java 打包通知 导入android.app.Notification 导入android.content.Context 导入android.content.Intent 导入android.graphics.Bitmap 导入android.os.Bundle 导入android.service.notifi

我已经看过基本的android studio教程,现在我想开发一个可以保存flash消息和通知的应用程序。有人请告诉我怎么做,并提供有用的链接

  • NotificationService.java

    打包通知
    导入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();  
                }  
            }  
        };  
    }  
    
    package.android.notifications;
    导入android.app.Activity;
    导入android.content.BroadcastReceiver;
    导入android.content.Context;
    导入android.content.Intent;
    导入android.content.IntentFilter;
    导入android.graphics.Bitmap;
    导入android.graphics.BitmapFactory;
    导入android.os.Bundle;
    导入android.support.v4.content.LocalBroadcastManager;
    导入android.view.Menu;
    导入android.view.MenuItem;
    导入android.widget.ListView;
    导入java.util.ArrayList;
    /** 
    *穆克什于2015年5月19日创作。
    */  
    公共类MainActivity扩展活动{
    列表视图列表;
    自定义列表适配器;
    ArrayList模型列表;
    @凌驾
    创建时受保护的void(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    modelList=新的ArrayList();
    adapter=新的CustomListAdapter(getApplicationContext(),modelList);
    list=(ListView)findViewById(R.id.list);
    list.setAdapter(适配器);
    LocalBroadcastManager.getInstance(this.registerReceiver)(onNotice,newintentfilter(“Msg”);
    }  
    @凌驾
    公共布尔onCreateOptions菜单(菜单菜单){
    getMenuInflater().inflate(R.menu.menu_main,menu);//菜单资源,菜单
    返回true;
    }  
    @凌驾
    公共布尔值onOptionsItemSelected(MenuItem项){
    开关(item.getItemId()){
    案例R.id.action\u设置:
    意向=新意向(
    “android.settings.ACTION_NOTIFICATION_LISTENER_settings”);
    星触觉(意向);
    返回true;
    违约:
    返回super.onOptionsItemSelected(项目);
    }  
    }  
    private BroadcastReceiver onNotice=新的BroadcastReceiver(){
    @凌驾
    public void onReceive(上下文、意图){
    //字符串包=intent.getStringExtra(“包”);
    字符串标题=intent.getStringExtra(“标题”);
    String text=intent.getStringExtra(“文本”);
    //int id=intent.getIntExtra(“图标”,0);
    Context-remotePackageContext=null;
    试试{
    //remotePackageContext=getApplicationContext().createPackageContext(包,0);
    //可绘制图标=remotePackageContext.getResources().getDrawable(id);
    //如果(图标!=null){
    //((ImageView)findViewById(R.id.ImageView)).setBackground(图标);
    //                }  
    字节[]byteArray=intent.getByteArrayExtra(“图标”);
    位图bmp=null;
    如果(byteArray!=null){
    bmp=BitmapFactory.decodeByteArray(byteArray,0,byteArray.length);
    }  
    模型=新模型();
    model.setName(title+“”+text);
    setImage(bmp);
    如果(modelList!=null){
    添加(模型);
    adapter.notifyDataSetChanged();
    }否则{
    modelList=新的ArrayList();
    添加(模型);
    adapter=新的CustomListAdapter(getApplicationContext(),modelList);
    list=(ListView)findViewById(R.id.list);
    list.setAdapter(适配器);
    }  
    }捕获(例外e){
    e、 printStackTrace();
    }  
    }  
    };  
    }  
    
  • AndroidManifest.xml

    package=“android.notifications”>
    

  • 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>