Java 来自JSON的通知服务

Java 来自JSON的通知服务,java,android,json,service,notifications,Java,Android,Json,Service,Notifications,如何发出通知? 当有新闻时,如何检查新闻日期并显示通知? 服务能否从片段获取SharedRef并进行检查,然后发出通知或否 TabFragment1.classcode: @Override protected void onPostExecute(StringBuilder stringBuilder) { try { JSONObject jsonObject = new JSONObject(stringBuilder.toString()); J

如何发出通知? 当有新闻时,如何检查新闻日期并显示通知? 服务能否从
片段
获取SharedRef并进行检查,然后发出通知或否

TabFragment1.class
code:

@Override
protected void onPostExecute(StringBuilder stringBuilder) {

    try {
        JSONObject jsonObject = new JSONObject(stringBuilder.toString());
        JSONArray array = jsonObject.getJSONArray("articles");
        for (int i = 0; i < array.length(); i++) {
            JSONObject object = array.getJSONObject(i);
            String title = object.getString("title");
            String desc = object.getString("description");
            String imageUrl = object.getString("urlToImage");
            String articleUrl = object.getString("url");
            String newsdata = object.getString("publishedAt");

            sPref = getActivity().getSharedPreferences("MyPref", MODE_PRIVATE);
            SharedPreferences.Editor ed = sPref.edit();
            ed.putString(SAVED_TEXT, newsdata);
            ed.commit();
            Toast.makeText(getActivity(), "Text saved", Toast.LENGTH_SHORT).show();
            News news = new News(title, desc, imageUrl, articleUrl);
            myAdapter.addNews(news);

            myAdapter.notifyDataSetChanged();
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
}
@覆盖
PostExecute上受保护的void(StringBuilder StringBuilder){
试一试{
JSONObject JSONObject=新的JSONObject(stringBuilder.toString());
JSONArray数组=jsonObject.getJSONArray(“文章”);
对于(int i=0;i
通知服务代码:

public class Notification extends Service {
    String datanews;
    String titlenotif;
    String destnotif;
    MyAsynk asynk;
    final String SAVED_TEXT = "saved_text";
    String checker;
    SharedPreferences sPref;

    @Override
    public void onCreate() {
        super.onCreate();
        Timer timer = new Timer();
        timer.schedule(new UpdateTimeTask(), 0, 1800000); //тикаем каждые 30 мinute без задержки 1800000
    }

    class UpdateTimeTask extends TimerTask {
        public void run() {
            sPref = getSharedPreferences("MyPref",MODE_PRIVATE);
            String savedText = sPref.getString(SAVED_TEXT, "");
            checker = sPref.getString(savedText, "0");

            if(datanews != checker){
                asynk = new MyAsynk();
                asynk.execute();
                createNotification(getApplicationContext());//пушим уведомление
            } else {
                asynk = new MyAsynk();
                asynk.execute();
            }
        }
    }

    class MyAsynk extends AsyncTask<Void,Void,StringBuilder> {
        @Override
        protected StringBuilder doInBackground(Void... voids) {
            StringBuilder stringBuilder = new StringBuilder();
            String key = "0aa2713d5a1a4aad9a914c9294f6a22b";
            try {
                URL url = new URL("https://newsapi.org/v1/articles?source=the-next-web&sortBy=latest&apiKey=" + key);
                URLConnection uc = url.openConnection();
                uc.connect();
                BufferedInputStream in = new BufferedInputStream(uc.getInputStream());
                int ch;
                while ((ch = in.read()) != -1) {
                    stringBuilder.append((char) ch);
                }
            } catch (Exception e) {e.printStackTrace();}

            return stringBuilder;
        }

        @Override
        protected void onPostExecute(StringBuilder stringBuilder) {
            try {
                JSONObject jsonObject = new JSONObject(stringBuilder.toString());
                JSONArray array = jsonObject.getJSONArray("articles");
                for (int i = 0; i < array.length(); i++) {
                    JSONObject object = array.getJSONObject(i);
                    String title = object.getString("title");
                    String desc = object.getString("description");
                    String newsdata = object.getString("publishedAt");
                    datanews = newsdata;
                    titlenotif = title;
                    destnotif = desc;
                }
            }
            catch (Exception e){e.printStackTrace();}
        }
    }

    private void createNotification(Context context) {
        NotificationManager manager = (NotificationManager) context.getSystemService(NOTIFICATION_SERVICE);
        NotificationCompat.Builder ncBuilder = new NotificationCompat.Builder(context);
        Intent intent = new Intent(this, MainActivity.class);
        PendingIntent pIntent = PendingIntent.getActivity(this, 0, intent, 0);
        ncBuilder.setVibrate(new long[]{500});
        ncBuilder.setLights(Color.WHITE, 3000, 3000);
        ncBuilder.setSound(Settings.System.DEFAULT_NOTIFICATION_URI);
        ncBuilder.setContentIntent(pIntent);
        ncBuilder.setContentTitle(titlenotif + "");
        ncBuilder.setContentText(destnotif + "");
        ncBuilder.setTicker("You have news!");
        ncBuilder.setSmallIcon(R.drawable.news_icon);
        ncBuilder.setAutoCancel(true);
        manager.notify((int)System.currentTimeMillis(),ncBuilder.build());
    }
    public IBinder onBind(Intent arg0) {
        return null;
    }
}
公共类通知扩展服务{
字符串数据新闻;
字符串标题符号;
字符串destnotif;
MyAsynk-asynk;
最后一个字符串SAVED_TEXT=“SAVED_TEXT”;
字符串检查器;
共享引用sPref;
@凌驾
public void onCreate(){
super.onCreate();
定时器=新定时器();
计时器计划(新的UpdateTimeTask(),01800000)//30分钟
}
类UpdateTimeTask扩展了TimerTask{
公开募捐{
sPref=GetSharedReferences(“MyPref”,模式为私有);
String savedText=sPref.getString(已保存的文本“”);
checker=sPref.getString(savedText,“0”);
如果(数据新闻!=检查程序){
asynk=新的MyAsynk();
asynk.execute();
createNotification(getApplicationContext());//ППццццццц
}否则{
asynk=新的MyAsynk();
asynk.execute();
}
}
}
类MyAsynk扩展了异步任务{
@凌驾
受保护的StringBuilder doInBackground(无效…无效){
StringBuilder StringBuilder=新的StringBuilder();
字符串键=“0aa2713d5a1a4aad9a914c9294f6a22b”;
试一试{
URL=新URL(“https://newsapi.org/v1/articles?source=the-next web&sortBy=最新&apiKey=“+key”);
URLConnection uc=url.openConnection();
uc.connect();
BufferedInputStream in=新的BufferedInputStream(uc.getInputStream());
int-ch;
而((ch=in.read())!=-1){
stringBuilder.append((char)ch);
}
}catch(异常e){e.printStackTrace();}
返回stringBuilder;
}
@凌驾
PostExecute上受保护的void(StringBuilder StringBuilder){
试一试{
JSONObject JSONObject=新的JSONObject(stringBuilder.toString());
JSONArray数组=jsonObject.getJSONArray(“文章”);
对于(int i=0;i
服务
可以读取
共享参考
并可以发出通知

如果我理解正确,您需要在
MyAsynk
类的
onPostExecute
函数中创建通知

因此,您可以像这样尝试在
AsyncTask
中添加公共属性

class MyAsynk extends AsyncTask<Void,Void,StringBuilder> {

    public boolean showNotification;

    // .. Other functions
}
现在,在
MyAsynk
类的
onPostExecute
中,需要检查布尔值并相应地创建通知

@Override
protected void onPostExecute(StringBuilder stringBuilder) {
    try {
        JSONObject jsonObject = new JSONObject(stringBuilder.toString());
        JSONArray array = jsonObject.getJSONArray("articles");
        for (int i = 0; i < array.length(); i++) {
            JSONObject object = array.getJSONObject(i);
            String title = object.getString("title");
            String desc = object.getString("description");
            String newsdata = object.getString("publishedAt");
            datanews = newsdata;
            titlenotif = title;
            destnotif = desc;
        }

        // Create notification here on demand
        if(showNotification) createNotification(getApplicationContext);
    }
    catch (Exception e){e.printStackTrace();}
}
@覆盖
PostExecute上受保护的void(StringBuilder StringBuilder){
试一试{
JSONObject JSONObject=新的JSONObject(stringBuilder.toString());
JSONArray数组=jsonObject.getJSONArray(“文章”);
对于(int i=0;i@Override
protected void onPostExecute(StringBuilder stringBuilder) {
    try {
        JSONObject jsonObject = new JSONObject(stringBuilder.toString());
        JSONArray array = jsonObject.getJSONArray("articles");
        for (int i = 0; i < array.length(); i++) {
            JSONObject object = array.getJSONObject(i);
            String title = object.getString("title");
            String desc = object.getString("description");
            String newsdata = object.getString("publishedAt");
            datanews = newsdata;
            titlenotif = title;
            destnotif = desc;
        }

        // Create notification here on demand
        if(showNotification) createNotification(getApplicationContext);
    }
    catch (Exception e){e.printStackTrace();}
}