Открытие намерения во второй раз из службы не работает

#java #android

#java #Android

Вопрос:

Я создаю небольшой пульт дистанционного управления для своего планшета Android. В принципе, у меня есть сервер, который отправляет json, содержащий идентификатор видео Youtube.

В моем приложении для Android у меня есть работающая фоновая служба, и я продолжаю проверять идентификатор в цикле, и всякий раз, когда я получаю новый идентификатор видео, я пытаюсь передать его в намерение ACTION_VIEW. Это работает только после запуска приложения. но всякий раз, когда я отправляю новое значение, служба обнаруживает его и выводит в виде журнала, но приложение Youtube не получает новое видео.

Вот мой код..

Чего именно мне не хватает?

 
package com.example.testytbot;
 
import android.app.Activity;
import android.app.Application;
import android.app.IntentService;
import android.content.ActivityNotFoundException;
import android.content.Context;
import android.content.Intent;
import android.media.AudioManager;
import android.net.Uri;
 
import org.json.JSONException;
import org.json.JSONObject;
 
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
import java.security.Provider;
import java.util.Timer;
import java.util.TimerTask;
 
import javax.net.ssl.HttpsURLConnection;
import android.app.Service;
import android.content.Intent;
import android.os.Binder;
 
import android.os.Build;
import android.os.Handler;
import android.os.IBinder;
import android.os.SystemClock;
import android.support.annotation.RequiresApi;
import android.util.Log;
import android.view.KeyEvent;
import android.widget.Toast;
 
public class YT extends Service {
 
 
    private static final String DEFAULT_EXTRA = "";
    private final IBinder mBinder = new LocalBinder();
 
    public class LocalBinder extends Binder {
        YT getService() {
 
            return YT.this;
        }
    }
 
    public String oldvidID = "";
    public int onStartCommand(Intent intent, int flags, int startId) {
 
        new Timer().scheduleAtFixedRate(new TimerTask() {
            @RequiresApi(api = Build.VERSION_CODES.O)
            @Override
            public void run() {
 
                String url = "https://mywebsite.com/tv/vid";
                JSONObject jObject = null;
                try {
                    jObject = new JSONObject(getJSON(url));
                    try {
                        String theId = jObject.getString("id");
                        //System.out.println("THE ID IIIIIIIIIIIIIIIS:::: "   theId);
 
                        if (!theId.equals("") amp;amp; !oldvidID.equals(theId)) {
                            System.out.println("Server ID :::: "   theId);
                            System.out.println("nAPP ID :::: "   theId);
                            
 
 
                            Intent intent;
                            intent = new Intent(Intent.ACTION_VIEW, Uri.parse("vnd.youtube://"   theId));
                            intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                            intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
 
 
 
                            try {
                                getBaseContext().startActivity(intent);
                            } catch(ActivityNotFoundException e) {
                                System.out.println(e);
                            }
 
                            oldvidID = theId;
 
                        }
 
                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
                } catch (JSONException e) {
                    e.printStackTrace();
                }
 
            }
        }, 0, 4000);
 
 
 
 
        return START_STICKY;
    }
 
    @Override
    public IBinder onBind(Intent intent) {
        return mBinder;
    }
 
    public static String getJSON(String url) {
        HttpsURLConnection con = null;
        try {
            URL u = new URL(url);
            con = (HttpsURLConnection) u.openConnection();
 
            con.connect();
 
 
            BufferedReader br = new BufferedReader(new InputStreamReader(con.getInputStream()));
            StringBuilder sb = new StringBuilder();
            String line;
            while ((line = br.readLine()) != null) {
                sb.append(line   "n");
            }
            br.close();
            return sb.toString();
 
 
        } catch (MalformedURLException ex) {
            ex.printStackTrace();
        } catch (IOException ex) {
            ex.printStackTrace();
        } finally {
            if (con != null) {
                try {
                    con.disconnect();
                } catch (Exception ex) {
                    ex.printStackTrace();
                }
            }
        }
        return null;
    }
}


  

Спасибо!

Комментарии:

1. Мне было бы интересно узнать, какой подход может разрешить это.