Genarate pu sh уведомление для android устройства из json фида - PullRequest
0 голосов
/ 08 мая 2020

Я разработал приложение веб-просмотра для android устройств. Я хочу создать службу уведомлений pu sh без Firebase, особенно мой собственный канал из файла JSON. Я реализовал сервис и пытаюсь проверить ленту с интервалом в 10 минут. Предварительно, что работает нормально. но через некоторое время он работает только после перезагрузки, но теперь он не работает. Я делюсь своим кодом, чтобы обратиться за помощью по этому поводу. Сервис зависает во время установки приложения. Могут ли другие программисты найти для меня решение? Это поможет другим реализовать собственную службу уведомлений pu sh. Заранее благодарим

Myservice. java file

import android.annotation.SuppressLint;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.graphics.BitmapFactory;
import android.os.Handler;
import android.os.IBinder;
import android.os.StrictMode;
import android.util.Log;
import android.widget.Toast;
import androidx.core.app.NotificationCompat;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.security.SecureRandom;
import java.util.ArrayList;
import java.util.Date;
import java.util.Random;
import java.util.Timer;
import java.util.TimerTask;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

public class MyService extends Service {

public MyService() {
}

private static final String TAG = MyService.class.getSimpleName();

public static final int notify = 6000;  //interval between two services(Here Service run every 600 seconds)
int count = 0;  //number of times service is display
private Handler mHandler = new Handler();   //run on another Thread to avoid crash
private Timer mTimer = null;    //timer handling
ArrayList<String> title = new ArrayList<>();
ArrayList<String> description = new ArrayList<>();
ArrayList<String> link = new ArrayList<>();
String data = "";
private Integer first;

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    onTaskRemoved(intent);
    // Toast.makeText(getApplicationContext(),"This is a Service running in Background",Toast.LENGTH_SHORT).show();
    return START_STICKY;
}

@Override
public IBinder onBind(Intent intent) {
    throw new UnsupportedOperationException("Not yet implemented");
}

@Override
public void onCreate() {
    if (mTimer != null) // Cancel if already existed
        mTimer.cancel();
    else
        mTimer = new Timer();   //recreate new
    mTimer.scheduleAtFixedRate(new TimeDisplay(), 0, notify);   //Schedule task
}

@Override
public void onDestroy() {
    super.onDestroy();
    mTimer.cancel();    //For Cancel Timer
    Toast.makeText(this, "Service is Destroyed", Toast.LENGTH_SHORT).show();
}

@Override
public void onTaskRemoved(Intent rootIntent) {
    Intent restartServiceIntent = new Intent(getApplicationContext(), this.getClass());
    restartServiceIntent.setPackage(getPackageName());
    startService(restartServiceIntent);
    super.onTaskRemoved(rootIntent);
}

//class TimeDisplay for handling task
class TimeDisplay extends TimerTask {
    @Override
    public void run() {
        // run on another thread
        mHandler.post(new Runnable() {
            @Override
            public void run() {
                try {
                    sendNotification();
                } catch (IOException | JSONException e) {
                    e.printStackTrace();
                }

            }
        });

    }

}

@SuppressLint("WrongConstant")
public void sendNotification() throws IOException, JSONException {
    String jsonStr = makeServiceCall("https://www.example.com/app/index.php");
    if (jsonStr != null) {
        try {
            JSONObject jsonObj = new JSONObject(jsonStr);

            // Getting JSON Array node
            JSONArray gurunoti = jsonObj.getJSONArray("items");
            JSONObject c = null;


            for (int i = 0; i < gurunoti.length() - 1; i++) {
                c = gurunoti.getJSONObject(i);

                //store your variable
                title.add(c.getString("title"));
                description.add(c.getString("description"));
                link.add(c.getString("link"));

            }


        } catch (final JSONException e) {
            Log.e(TAG, "Json parsing error: " + e.getMessage());


        }
    } else {
        Log.e(TAG, "Couldn't get json from server.");
    }
    //  Log.i("new", fetchUrl()+"link :"+link);
    //  Log.i("size:", ""+title.length);
    for (int j = title.size() - 1; j >= 0; j--) {
        if (fetchUrl() < getUrlID(link.get(j))) {
            NotificationCompat.Builder mBuilder =
                    new NotificationCompat.Builder(this, "");

            Intent intent = new Intent(this, HomeActivity.class);
            intent.putExtra("url", link.get(j));
            PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);

            mBuilder.setContentIntent(pendingIntent)
                    .setLargeIcon(BitmapFactory.decodeResource(this.getResources(), R.drawable.ic_launcher))
                    .setSmallIcon(R.drawable.ic_launcher)
                    .setDefaults(Notification.DEFAULT_SOUND | Notification.DEFAULT_LIGHTS | Notification.DEFAULT_VIBRATE)
                    .setContentTitle(title.get(j))
                    .setContentText(description.get(j))
                    .setAutoCancel(true)
                    .setStyle(new NotificationCompat.BigTextStyle().bigText(description.get(j)));


            NotificationManager mNotificationManager =

                    (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);

            mNotificationManager.notify(createRandomCode(7), mBuilder.build());
            ;
        }
    }
    storeUrl(link.get(0));
}

public String makeServiceCall(String reqUrl) {

    int SDK_INT = android.os.Build.VERSION.SDK_INT;

    if (SDK_INT > 8) {

        StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder()
                .permitAll().build();
        StrictMode.setThreadPolicy(policy);
        try {
            URL url = new URL(reqUrl + "?" + new Date().getTime());
            HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
            InputStream inputStream = httpURLConnection.getInputStream();
            BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
            String line = "";
            while (bufferedReader.readLine() != null) {
                line = bufferedReader.readLine();
                data = data + line;
            }
            bufferedReader.close();
            inputStream.close();
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

        return data;

    } else {

        try {
            URL url = new URL(reqUrl + "?" + new Date().getTime());
            HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
            InputStream inputStream = httpURLConnection.getInputStream();
            BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
            String line = "";
            while (line != null) {
                line = bufferedReader.readLine();
                data = data + line;
            }

        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

        return data;
    }
}

/* for debugging*/
public static void largeLog(String tag, String content) {
    if (content.length() > 4000) {
        Log.d(tag, content.substring(0, 4000));
        largeLog(tag, content.substring(4000));
    } else {
        Log.d(tag, content);
    }
}

public int createRandomCode(int codeLength) {
    char[] chars = "1234567890".toCharArray();
    StringBuilder sb = new StringBuilder();
    Random random = new SecureRandom();
    for (int i = 0; i < codeLength; i++) {
        char c = chars[random.nextInt(chars.length)];
        sb.append(c);
    }
    return Integer.parseInt(sb.toString());
}


public void storeUrl(String url) {
    SharedPreferences sharedPreferences
            = getSharedPreferences("MySharedPref", MODE_PRIVATE);

// Creating an Editor object
// to edit(write to the file)
        SharedPreferences.Editor myEdit
                = sharedPreferences.edit();

// Storing the key and its value
// as the data fetched from edittext
        myEdit.putString("latesturl", url);


// Once the changes have been made,
// we need to commit to apply those changes made,
// otherwise, it will throw an error
        myEdit.commit();
}


public Integer fetchUrl() throws JSONException {
    @SuppressLint("WrongConstant") SharedPreferences sh
            = getSharedPreferences("MySharedPref", MODE_APPEND);
    String s1 = sh.getString("latesturl", "");

    return getUrlID(s1);

}

public Integer getUrlID(String url) throws JSONException {
    String intValue = url.replaceAll("[^0-9]", "");
    int a = !intValue.equals("") ? Integer.parseInt(intValue) : getFirst();
    return a;

}

public Integer getFirst() throws JSONException {
    JSONObject c = null;
    JSONArray gurunoti = null;
    String jsonStr = makeServiceCall("https://www.example.com/app/index.php");
    if (jsonStr != null) {
        try {
            JSONObject jsonObj = new JSONObject(jsonStr);

            // Getting JSON Array node
            gurunoti = jsonObj.getJSONArray("items");

        } catch (JSONException e) {
            e.printStackTrace();
        }

        c = gurunoti.getJSONObject(0);

        String link = c.getString("link");
        return getUrlID(link) - 3;
    }
    else {
        Log.e(TAG, "Couldn't get json from server.");

        return 0;
    }


}


}

и это мой класс приемника полной загрузки

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;

 public class BootCompleteReceiver extends BroadcastReceiver {

        @Override
        public void onReceive(Context context, Intent intent) {

            Intent service = new Intent(context, MyService.class);
            context.startService(service);

        }

    }

Я также хочу знать, где разместить сервисная функция в веб-просмотре.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...