Je suis en train de créer une application EPG pour Android TV, j'ai donc besoin d'accéder aux données des chaînes stockées dans "/data/data/com.android.providers.tv/databases/tv.db" . J'ai essayé de faire une base de données helper c'est le code:sur les données EPG dans Android TV
package com.example.test;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteException;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
/**
* Created by Ahmed on 18/07/2017.
*/
public class DatabaseHelper extends SQLiteOpenHelper {
String DB_PATH=null;
private static String DB_NAME="tvls -";
private SQLiteDatabase myDataBase;
private final Context myContext;
public DatabaseHelper(Context context) {
super(context, DB_NAME, null , 10);
this.myContext=context;
this.DB_PATH="/data/data/com.android.providers.tv/databases";
Log.e("Path 1",DB_PATH);
}
public void createDataBase() throws IOException{
boolean dbExist = checkDataBase();
Log.i("Database Existe ?",""+dbExist);
if (dbExist){
}else{
this.getReadableDatabase();
try {
copyDataBase();
} catch (Exception e) {
throw new Error("Error coying database");
}
}
}
private void copyDataBase() throws IOException {
InputStream myInput = myContext.getAssets().open(DB_NAME);
String outFileName = DB_PATH + DB_NAME;
OutputStream myOutput = new FileOutputStream(outFileName);
byte[] buffer = new byte[10];
int length;
while ((length=myInput.read(buffer))>0){
myOutput.write(buffer,0,length);
}
myOutput.flush();
myOutput.close();
myInput.close();
}
private boolean checkDataBase() {
SQLiteDatabase checkDB = null;
try{
String myPath= DB_PATH + DB_NAME;
checkDB = SQLiteDatabase.openDatabase(myPath,null,SQLiteDatabase.OPEN_READONLY);
}catch (SQLiteException e){
e.printStackTrace();
}
if (checkDB !=null){
checkDB.close();
}
return checkDB != null ? true : false;
}
public void openDataBase() throws SQLException{
String myPath= DB_PATH + DB_NAME;
myDataBase = SQLiteDatabase.openDatabase(myPath,null,SQLiteDatabase.OPEN_READONLY);
}
@Override
public synchronized void close() {
if(myDataBase!=null)
myDataBase.close();
super.close();
}
@Override
public void onCreate(SQLiteDatabase db) {}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
if (newVersion > oldVersion)
try {
copyDataBase();
} catch (IOException e) {
e.printStackTrace();
}
}
public Cursor query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy) {
return myDataBase.query("channels", null, null, null, null, null, null);
}
}
mais il dose pas se connecter au tv.db et me jette cette erreur:
07-18 23:16:01.970 5361-5361/com.example.test E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example.test, PID: 5361 java.lang.Error: Error coying database at com.example.test.DatabaseHelper.createDataBase(DatabaseHelper.java:44) at com.example.test.MainActivity.onCreate(MainActivity.java:46) at android.app.Activity.performCreate(Activity.java:6237) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1107) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2369) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476) at android.app.ActivityThread.-wrap11(ActivityThread.java) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:148) at android.app.ActivityThread.main(ActivityThread.java:5417) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
PS: S'il y a des informations sur la façon d'utiliser TvProvider s'il vous plaît aider, je suis coincé. Tout ce que je dois faire est de lire la liste des chaînes et la liste de leurs programmes.
Le guide le plus proche que je puisse trouver en ce qui concerne les EPG se trouve dans [Viewing for TV Input Framework] (https://source.android.com/devices/tv/#viewing). Vous ne savez pas si cela vous aidera, mais il existe un guide [Building TV Channels] (https://developer.android.com/training/tv/tif/index.html) et un [exemple de code android-tv] (https: // github.com/googlesamples/androidtv-sample-inputs) vous pouvez exécuter. – noogui