#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. Мне было бы интересно узнать, какой подход может разрешить это.