Я редко пишу здесь, если это не хороший вопрос, который может принести пользу многим людям.В течение нескольких дней я исследовал контент-провайдера Android MMS.Мне нужно получить доступ к Android-данным MMS, а не к картинкам, а именно к видео.
Вот два хороших примера, первый вопрос 6 лет и он отвечает на мой вопрос, но код не работает (или порт на Python,но никто здесь не любит PyJnius или Kivy) Как получить доступ к Android-ресурсам MMS, таким как видео / аудио и т. д.? Как читать данные MMS в Android?
Я былвозможность:
- Извлечение данных растрового изображения
- Доступ к потокам ввода видео / данных MMS
- Перенос примера Java на Python с ошибками чтения байтов данных
Мне нужна помощь для:
- Доступ / сохранение определенного файла части MMS (например, "контент: // ммс / часть / 2036")
- Преобразовать ответ Java, опубликованный 6 лет назад, в Python / PyJnius (я могу сделать это на более новом примере)
Ниже приведен код, над которым я работаю в Python, но версия Java ниже.Python на данный момент не работает.
private static final int RAW_DATA_BLOCK_SIZE = 16384; //Set the block size used to write a ByteArrayOutputStream to byte[]
public static final int ERROR_IO_EXCEPTION = 1;
public static final int ERROR_FILE_NOT_FOUND = 2;
public static byte[] LoadRaw(Context context, Uri uri, int Error){
InputStream inputStream = null;
byte[] ret = new byte[0];
//Open inputStream from the specified URI
try {
inputStream = context.getContentResolver().openInputStream(uri);
//Try read from the InputStream
if(inputStream!=null)
ret = InputStreamToByteArray(inputStream);
}
catch (FileNotFoundException e1) {
Error = ERROR_FILE_NOT_FOUND;
}
catch (IOException e) {
Error = ERROR_IO_EXCEPTION;
}
finally{
if (inputStream != null) {
try {
inputStream.close();
}
catch (IOException e) {
//Problem on closing stream.
//The return state does not change.
Error = ERROR_IO_EXCEPTION;
}
}
}
//Return
return ret;
}
//Create a byte array from an open inputStream. Read blocks of RAW_DATA_BLOCK_SIZE byte
private static byte[] InputStreamToByteArray(InputStream inputStream) throws IOException{
ByteArrayOutputStream buffer = new ByteArrayOutputStream();
int nRead;
byte[] data = new byte[RAW_DATA_BLOCK_SIZE];
while ((nRead = inputStream.read(data, 0, data.length)) != -1) {
buffer.write(data, 0, nRead);
}
buffer.flush();
return buffer.toByteArray();
}
Мое преобразование, которое не работает, нужен новый пример Java или фиксированный порт на Python, пожалуйста!
from kivy.logger import Logger
from jnius import autoclass
from jnius import cast
from android import activity
def InputStreamToByteArray(self, inputStream):
ByteArrayOutputStream = autoclass('java.io.ByteArrayOutputStream')
byteBuffer = ByteArrayOutputStream()
#byte = autoclass('java.lang.Byte') #this is where I'm messing up..
buffer = bytes(1024) #not sure the equivalent in Python
#data = byte[16384]
len = 0
# This just loops forever, len = 4 forever
while int(len) != -1:
Logger.warning(str(len))
len = inputStream.read(buffer)
byteBuffer.write(buffer, 0, len)
return byteBuffer.toByteArray() #wish it worked :(
def LoadRaw(self, uri):
PythonActivity = autoclass('org.renpy.android.PythonActivity')
currentActivity = cast('android.app.Activity', PythonActivity.mActivity)
#Intent = autoclass('android.content.Intent')
Uri = autoclass('android.net.Uri')
the_uri = Uri.parse(uri)
inputStream = currentActivity.getContentResolver().openInputStream(the_uri)
# try to read from input stream:
ret = self.InputStreamToByteArray(inputStream)
return ret
data = self.LoadRaw("content://mms/part/2023") #this is a 10 second video
Это поможет очень многим людям,Любая помощь приветствуется!Любое руководство по моему коду?Пожалуйста, опубликуйте пример Java!