与其他应用分享uri

时间:2016-06-02 13:32:32

标签: android uri android-contentprovider

如何与其他应用分享我的应用中的Install-Package Microsoft.jQuery.Unobtrusive.Ajax ?它可能指向Dropbox文件,google驱动器文件,本地#import <AddressBook/AddressBook.h> - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. ABAddressBookRef addressBook = ABAddressBookCreate(); __block BOOL accessGranted = NO; if (ABAddressBookRequestAccessWithCompletion != NULL) { // We are on iOS 6 dispatch_semaphore_t semaphore = dispatch_semaphore_create(0); ABAddressBookRequestAccessWithCompletion(addressBook, ^(bool granted, CFErrorRef error) { accessGranted = granted; dispatch_semaphore_signal(semaphore); }); dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER); } else { // We are on iOS 5 or Older accessGranted = YES; [self getContactsWithAddressBook:addressBook]; } if (accessGranted) { [self getContactsWithAddressBook:addressBook]; } } // Get the contacts. - (void)getContactsWithAddressBook:(ABAddressBookRef )addressBook { //----------------------------------------------- create vcf file------------------------------------------ CFArrayRef contacts = ABAddressBookCopyArrayOfAllPeople(addressBook); CFDataRef vcards = (CFDataRef)ABPersonCreateVCardRepresentationWithPeople(contacts); NSString *vcardString = [[NSString alloc] initWithData:(__bridge NSData *)(vcards) encoding:NSUTF8StringEncoding]; NSError *error; NSFileManager *fileMgr = [NSFileManager defaultManager]; NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *folderPath = [paths objectAtIndex:0]; NSString *filePath = [folderPath stringByAppendingPathComponent:@"contacts.vcf"]; NSLog(@"%@===>",filePath); [vcardString writeToFile:filePath atomically:YES encoding:NSUTF8StringEncoding error:nil]; NSLog(@"Documents directory: %@",[fileMgr contentsOfDirectoryAtPath: folderPath error:&error]); } 或本地Uri

我的应用有权阅读File,现在我想与其他应用分享并传递权限。我该怎么做?

我真的必须编写自己的内容提供商吗?

1 个答案:

答案 0 :(得分:2)

  

我真的必须编写自己的内容提供商吗?

您无法强制第三方提供商(例如,Dropbos,Google云端硬盘)授予对单独第三方应用的访问权限。这类似于我能够授予其他人访问您的银行帐户的权限,因为您允许我访问您的银行帐户。

整体共享机制专为您管理的内容或简单内容(例如纯文本)而设计。

您的选择是:

  1. 不要分享您不管理的内容。

  2. 制作内容的本地副本(在文件中)并分享,例如通过ContentProvider

  3. 尝试创建一个代理ContentProvider,一个读取内容并通过管道直接提供的代理,而不是从包含内容副本的本地文件提供服务。对于ACTION_SEND,这可能有效,但请记住,管道支持的流不可搜索,因此某些类型的应用程序(如媒体播放器)不喜欢管道支持的流。