ListView:如何用声音和振动通知用户新获取的数据



我已经在下面添加了我的MainActivity,应用程序从数据库中获取数据并自动刷新和向下滑动

我的问题是,它究竟如何通过声音和振动通知用户"新"获取的插入?

关于"new inserts"的定义更具体,应用程序从0数据开始,一旦刷新,来自数据库的php调用获得一个新的JSON字符串,并在应用程序中解码并出现在listview中。

public class MainActivity extends AppCompatActivity implements SwipeRefreshLayout.OnRefreshListener {
        private int mInterval = 5000; // 5 seconds by default, can be changed later
        private Handler mHandler;
        private String TAG = MainActivity.class.getSimpleName();
        private String URL = "http://10.0.0.2:0080/stringtest2.php?offset=";

        private SwipeRefreshLayout swipeRefreshLayout;
        private ListView listView;
        private SwipeListAdapter adapter;
        private List<Order> orderList;
        // initially offset will be 0, later will be updated while parsing the json
        private int offSet = 0;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);

            listView = (ListView) findViewById(R.id.listView);
            //RelativeLayout.LayoutParams layout_description = new RelativeLayout.LayoutParams(50,10);
            //Rl.setLayoutParams(layout_description);
            swipeRefreshLayout = (SwipeRefreshLayout) findViewById(R.id.swipe_refresh_layout);
            orderList = new ArrayList<>();
            adapter = new SwipeListAdapter(this, orderList);
            listView.setAdapter(adapter);
            swipeRefreshLayout.setOnRefreshListener(this);
            /**
             * Showing Swipe Refresh animation on activity create
             * As animation won't start on onCreate, post runnable is used
             */
            swipeRefreshLayout.post(new Runnable() {
                                        @Override
                                        public void run() {
                                            swipeRefreshLayout.setRefreshing(true);
                                            fetchOrders();
                                        }
                                    }
            );
            mHandler = new Handler();
            startRepeatingTask();
        }

        /**
         * This method is called when swipe refresh is pulled down
         */

    Runnable mStatusChecker = new Runnable() {
        @Override
        public void run() {
            //updateStatus(); //this function can change value of mInterval.
            mHandler.postDelayed(mStatusChecker, mInterval);
        }
    };
        void startRepeatingTask() {
            mStatusChecker.run();
        }
        void stopRepeatingTask() {
            mHandler.removeCallbacks(mStatusChecker);
        }
    //added code start here
    Runnable mAutoRefreshRunnable = new Runnable() {
        @Override
        public void run() {
            fetchOrders();
            mHandler.postDelayed(mAutoRefreshRunnable, 60000);
        }
    };
        @Override
        protected void onResume() {
            super.onResume();
            mHandler.postDelayed(mAutoRefreshRunnable, 60000);
        }
        @Override
        protected void onPause(){
            super.onPause();
            mHandler.removeCallbacks(mAutoRefreshRunnable);
        }
        //added code ends here

        @Override
        public void onRefresh() {
            fetchOrders();
        }
        /**
         * Fetching movies json by making http call
         */
        private void fetchOrders() {
            // showing refresh animation before making http call
            swipeRefreshLayout.setRefreshing(true);
            // appending offset to url
            String url = URL + offSet;
            // Volley's json array request object
            JsonArrayRequest req = new JsonArrayRequest(url,
                    new Response.Listener<JSONArray>() {
                        @Override
                        public void onResponse(JSONArray response) {
                            Log.d(TAG, response.toString());
                            if (response.length() > 0) {
                                // looping through json and adding to order list
                                for (int i = 0; i < response.length(); i++) {
                                    try {
                                        JSONObject orderObj = response.getJSONObject(i);
                                        int rank = orderObj.getInt("rank");
                                        String title = orderObj.getString("title");
                                        Order m = new Order(rank, title);
                                        orderList.add(0, m);
                                        // updating offset value to highest value
                                        if (rank >= offSet)
                                            offSet = rank;
                                    } catch (JSONException e) {
                                        Log.e(TAG, "JSON Parsing error: " + e.getMessage());
                                    }
                                }
                                adapter.notifyDataSetChanged();
                            }
                            // stopping swipe refresh
                            swipeRefreshLayout.setRefreshing(false);
                        }
                    }, new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    Log.e(TAG, "Server Error: " + error.getMessage());
                    Toast.makeText(getApplicationContext(), "Can't connect to database", Toast.LENGTH_LONG).show();
                    // stopping swipe refresh
                    swipeRefreshLayout.setRefreshing(false);
                }
            });
            // Adding request to request queue
            MyApplication.getInstance().addToRequestQueue(req);
        }
    }

获取新数据后,有一个地方需要调用notifyDataSetChanged()来让listview更新它的内容。

在调用之后,你可以使用振动器来启动一个振动

Vibrator v = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
 // Vibrate for 500 milliseconds
 v.vibrate(500);

见:http://developer.android.com/reference/android/os/Vibrator.html

播放声音,你需要一个MediaPlayer:

MediaPlayer mp = MediaPlayer.create(this, yourSoundFile);
mp.start();

最新更新