Не удается открыть вложение почты на Android с помощью Apportable
Я пытался открыть вложение почты. Получить URL следующим способом
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
Но не могу получить данные с этого URL
NSData *data = [NSData dataWithContentsOfFile:[url path]]
// data is nil
Полученный URL
content://gmail-ls/mymail@gmail.com/messages/1/attachments/0.0/BEST/false
1 ответ
Решение
Я использовал Android SDK для решения этой проблемы. Вы можете посмотреть, как использовать Java с apportable здесь.
Это мой код Java
static private byte[] readBytes(InputStream inputStream) throws IOException {
// this dynamically extends to take the bytes you read
ByteArrayOutputStream byteBuffer = new ByteArrayOutputStream();
// this is storage overwritten on each iteration with bytes
int bufferSize = 1048576;
byte[] buffer = new byte[bufferSize];
// we need to know how may bytes were read to write them to the byteBuffer
int len = 0;
while ((len = inputStream.read(buffer)) != -1) {
byteBuffer.write(buffer, 0, len);
}
// and then we can return your byte array.
return byteBuffer.toByteArray();
}
public byte[] dataFromUrl(String path, Activity activity) {
Uri uri = Uri.parse(path);
InputStream is = null;
byte[] data = null;
try {
is = activity.getContentResolver().openInputStream(uri);
data = readBytes(is);
} catch (Exception e) {
e.printStackTrace();
}
return data;
}
И часть Objective-C
+ (void)initializeJava
{
[super initializeJava];
// here your initialize code
...
[KeyboardBridge registerInstanceMethod:@"dataFromUrl"
selector:@selector(dataFromUrl:forActivity:)
returnValue:[NSData className]
arguments:[NSString className], [AndroidActivity className], nil];
}
- (NSData *)dataFromUrl:(NSString *)path {
return [self dataFromUrl:path forActivity:[AndroidActivity currentActivity]];
}