Android 6.0.1 - 通过Messenger和Intent.ACTION_SEND进行图像共享会导致安全异常

时间:2016-02-19 18:01:11

标签: android android-intent android-sharing

我尝试使用Intent.createChooserIntent.ACTION_SEND从我的Android应用分享图片。图像将保存到activity.getExternalMediaDirs()返回的第一个结果中。然后我用:

mediaScannerConnection.scanFile(imageFilename, "image/png");

此操作成功,将以下URI提供给onScanCompleted

content://media/external/images/media/27578

然后我尝试将此URI传递给系统选择器对话框:

@Override
public void onScanCompleted(String path, Uri uri) {
    mediaScannerConnection.disconnect();

    Intent shareIntent = new Intent(Intent.ACTION_SEND);
    shareIntent.putExtra(Intent.EXTRA_TEXT, text);
    shareIntent.putExtra("sms_body", text);
    shareIntent.putExtra(Intent.EXTRA_SUBJECT, subject);
    shareIntent.putExtra(Intent.EXTRA_STREAM, uri);
    shareIntent.setClipData(ClipData.newUri(activity.getContentResolver(), "Screenshot", uri));
    shareIntent.setType("image/png");
    shareIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
    activity.startActivity(Intent.createChooser(shareIntent, chooserTitle));
}

这似乎适用于大多数选定的目标应用,包括环聊。当选择默认的MMS应用程序Messenger时,似乎什么也没发生。但是日志中有一条消息:

02-19 12:17:58.714 26143 26354 I iu.UploadsManager: storage changed; old: -1, new: -1
02-19 12:17:58.773 26143  3554 I iu.UploadsManager: End new media; added: 0, uploading: 0, time: 50 ms
02-19 12:17:58.804   782  4995 I ActivityManager: START u0 {act=android.intent.action.CHOOSER flg=0x1 cmp=android/com.android.internal.app.ChooserActivity clip={image/png text/uri-list U:content://media/external/images/media/27578} (has extras)} from uid 10289 on display 0
02-19 12:17:58.851   782 21004 I ActivityManager: Start proc 3569:android:ui/1000 for activity android/com.android.internal.app.ChooserActivity
02-19 12:17:59.000  3569  3569 W ResourceType: ResTable_typeSpec entry count inconsistent: given 1, previously 1266
02-19 12:17:59.479  3569  3569 W ResourceType: ResTable_typeSpec entry count inconsistent: given 1, previously 1266
02-19 12:17:59.495   782  4995 I ActivityManager: Start proc 3591:com.google.android.apps.messaging/u0a120 for service com.google.android.apps.messaging/.shared.datamodel.BugleChooserTargetService
02-19 12:17:59.519   782   957 I ActivityManager: Start proc 3604:com.google.android.apps.docs:UploadToFolder/u0a37 for service com.google.android.apps.docs/.drive.directsharing.ChooserTargetService
02-19 12:17:59.568  3569  3617 D OpenGLRenderer: Use EGL_SWAP_BEHAVIOR_PRESERVED: true
02-19 12:17:59.617  3569  3617 I Adreno-EGL: <qeglDrvAPI_eglInitialize:379>: QUALCOMM Build: 10/21/15, 369a2ea, I96aee987eb
02-19 12:17:59.620  3569  3617 I OpenGLRenderer: Initialized EGL, version 1.4
02-19 12:17:59.880  1280  1280 I Keyboard.Facilitator: onFinishInput()
02-19 12:17:59.901   782   803 I ActivityManager: Displayed android/com.android.internal.app.ChooserActivity: +1s61ms
02-19 12:17:59.947  3591  3605 D BugleServices: onGetChooserTargets called()
02-19 12:17:59.952  3591  3652 I art     : Note: end time exceeds epoch:
02-19 12:17:59.959  3591  3591 I Bugle   : Carrier config changed. Reloading MMS config.
02-19 12:18:00.011   782  4995 I ActivityManager: Killing 2966:com.android.keychain/1000 (adj 15): empty #17
02-19 12:18:00.016  3604  3604 E ActivityThread: Service com.google.android.apps.docs.drive.directsharing.ChooserTargetService has leaked IntentReceiver android.accounts.AccountManager$1@b62460a that was originally registered here. Are you missing a call to unregisterReceiver()?
02-19 12:18:00.016  3604  3604 E ActivityThread: android.app.IntentReceiverLeaked: Service com.google.android.apps.docs.drive.directsharing.ChooserTargetService has leaked IntentReceiver android.accounts.AccountManager$1@b62460a that was originally registered here. Are you missing a call to unregisterReceiver()?
02-19 12:18:00.016  3604  3604 E ActivityThread:        at android.app.LoadedApk$ReceiverDispatcher.<init>(LoadedApk.java:918)
02-19 12:18:00.016  3604  3604 E ActivityThread:        at android.app.LoadedApk.getReceiverDispatcher(LoadedApk.java:719)
02-19 12:18:00.016  3604  3604 E ActivityThread:        at android.app.ContextImpl.registerReceiverInternal(ContextImpl.java:1172)
02-19 12:18:00.016  3604  3604 E ActivityThread:        at android.app.ContextImpl.registerReceiver(ContextImpl.java:1152)
02-19 12:18:00.016  3604  3604 E ActivityThread:        at android.app.ContextImpl.registerReceiver(ContextImpl.java:1146)
02-19 12:18:00.016  3604  3604 E ActivityThread:        at android.accounts.AccountManager.addOnAccountsUpdatedListener(AccountManager.java:2549)
02-19 12:18:00.016  3604  3604 E ActivityThread:        at dah.<init>(PG:1135)
02-19 12:18:00.016  3604  3604 E ActivityThread:        at daz.<init>(PG:10223)
02-19 12:18:00.016  3604  3604 E ActivityThread:        at com.google.android.apps.docs.preferences.UploadHistoryReader.<init>(PG:124)
02-19 12:18:00.016  3604  3604 E ActivityThread:        at com.google.android.apps.docs.drive.directsharing.ChooserTargetService.onCreate(PG:49)
02-19 12:18:00.016  3604  3604 E ActivityThread:        at android.app.ActivityThread.handleCreateService(ActivityThread.java:2877)
02-19 12:18:00.016  3604  3604 E ActivityThread:        at android.app.ActivityThread.-wrap4(ActivityThread.java)
02-19 12:18:00.016  3604  3604 E ActivityThread:        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1427)
02-19 12:18:00.016  3604  3604 E ActivityThread:        at android.os.Handler.dispatchMessage(Handler.java:102)
02-19 12:18:00.016  3604  3604 E ActivityThread:        at android.os.Looper.loop(Looper.java:148)
02-19 12:18:00.016  3604  3604 E ActivityThread:        at android.app.ActivityThread.main(ActivityThread.java:5417)
02-19 12:18:00.016  3604  3604 E ActivityThread:        at java.lang.reflect.Method.invoke(Native Method)
02-19 12:18:00.016  3604  3604 E ActivityThread:        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
02-19 12:18:00.016  3604  3604 E ActivityThread:        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
02-19 12:18:00.062  3591  3650 I BugleDataModel: Fixup: Send failed - 0 Download failed - 0
02-19 12:18:00.099  3591  3655 W Bugle   : canonicalizeMccMnc: invalid mccmnc:null ,null
02-19 12:18:00.109  1898  1898 V GLSActivity: AuthDelegateWrapperCreated with selected intent: Intent { cmp=com.google.android.gms/.auth.DefaultAuthDelegateService }
02-19 12:18:00.113  1898  1898 V GLSActivity: AuthDelegateWrapperCreated with selected intent: Intent { cmp=com.google.android.gms/.auth.DefaultAuthDelegateService }
02-19 12:18:00.120   782   954 D MmsServiceBroker: getCarrierConfigValues() by com.google.android.apps.messaging
02-19 12:18:00.120  1397  1421 D MmsService: getCarrierConfigValues
02-19 12:18:00.120  1397  1421 I MmsService: mms config for sub 1: Bundle[{httpSocketTimeout=60000, aliasMinChars=2, smsToMmsTextThreshold=8, enableSMSDeliveryReports=true, maxMessageTextSize=-1, supportMmsContentDisposition=true, enabledTransID=false, aliasEnabled=false, supportHttpCharsetHeader=false, allowAttachAudio=true, smsToMmsTextLengthThreshold=-1, recipientLimit=20, uaProfTagName=x-wap-profile, aliasMaxChars=48, maxImageHeight=1944, enableMMSDeliveryReports=false, userAgent=, config_cellBroadcastAppLinks=false, maxSubjectLength=80, httpParams=, enableGroupMms=false, emailGatewayNumber=6245, maxMessageSize=614400, naiSuffix=, enableMMSReadReports=false, maxImageWidth=2592, uaProfUrl=, enabledMMS=true, enabledNotifyWapMMSC=false, sendMultipartSmsAsSeparateMessages=false, enableMultipartSMS=true}]
02-19 12:18:00.121  3591  3655 I Bugle   : Carrier configs loaded: Bundle[{httpSocketTimeout=60000, aliasMinChars=2, smsToMmsTextThreshold=8, enableSMSDeliveryReports=true, maxMessageTextSize=-1, supportMmsContentDisposition=true, enabledTransID=false, aliasEnabled=false, supportHttpCharsetHeader=false, allowAttachAudio=true, smsToMmsTextLengthThreshold=-1, recipientLimit=20, uaProfTagName=x-wap-profile, aliasMaxChars=48, maxImageHeight=1944, enableMMSDeliveryReports=false, userAgent=, config_cellBroadcastAppLinks=false, maxSubjectLength=80, httpParams=, enableGroupMms=false, emailGatewayNumber=6245, maxMessageSize=614400, naiSuffix=, enableMMSReadReports=false, maxImageWidth=2592, uaProfUrl=, enabledMMS=true, enabledNotifyWapMMSC=false, sendMultipartSmsAsSeparateMessages=false, enableMultipartSMS=true}] from resources+system for subId=1
02-19 12:18:00.113  3591  3647 I Bugle   : ApnsOta: OTA version -1
02-19 12:18:00.158  1898  1898 V GLSActivity: AuthDelegateWrapperCreated with selected intent: Intent { cmp=com.google.android.gms/.auth.DefaultAuthDelegateService }
02-19 12:18:00.164  3591  3657 W Bugle   : canonicalizeMccMnc: invalid mccmnc:null ,null
02-19 12:18:00.186   782  3714 D MmsServiceBroker: getCarrierConfigValues() by com.google.android.apps.messaging
02-19 12:18:00.186  1397  1631 D MmsService: getCarrierConfigValues
02-19 12:18:00.186  1397  1631 I MmsService: mms config for sub 1: Bundle[{httpSocketTimeout=60000, aliasMinChars=2, smsToMmsTextThreshold=8, enableSMSDeliveryReports=true, maxMessageTextSize=-1, supportMmsContentDisposition=true, enabledTransID=false, aliasEnabled=false, supportHttpCharsetHeader=false, allowAttachAudio=true, smsToMmsTextLengthThreshold=-1, recipientLimit=20, uaProfTagName=x-wap-profile, aliasMaxChars=48, maxImageHeight=1944, enableMMSDeliveryReports=false, userAgent=, config_cellBroadcastAppLinks=false, maxSubjectLength=80, httpParams=, enableGroupMms=false, emailGatewayNumber=6245, maxMessageSize=614400, naiSuffix=, enableMMSReadReports=false, maxImageWidth=2592, uaProfUrl=, enabledMMS=true, enabledNotifyWapMMSC=false, sendMultipartSmsAsSeparateMessages=false, enableMultipartSMS=true}]
02-19 12:18:00.187  3591  3657 I Bugle   : Carrier configs loaded: Bundle[{httpSocketTimeout=60000, aliasMinChars=2, smsToMmsTextThreshold=8, enableSMSDeliveryReports=true, maxMessageTextSize=-1, supportMmsContentDisposition=true, enabledTransID=false, aliasEnabled=false, supportHttpCharsetHeader=false, allowAttachAudio=true, smsToMmsTextLengthThreshold=-1, recipientLimit=20, uaProfTagName=x-wap-profile, aliasMaxChars=48, maxImageHeight=1944, enableMMSDeliveryReports=false, userAgent=, config_cellBroadcastAppLinks=false, maxSubjectLength=80, httpParams=, enableGroupMms=false, emailGatewayNumber=6245, maxMessageSize=614400, naiSuffix=, enableMMSReadReports=false, maxImageWidth=2592, uaProfUrl=, enabledMMS=true, enabledNotifyWapMMSC=false, sendMultipartSmsAsSeparateMessages=false, enableMultipartSMS=true}] from resources+system for subId=1
02-19 12:18:00.223  3591  3665 I BugleDataModel: SyncMessagesAction: Starting batch for messages from 1455894395560 to 1455902279886 (message update limit = 80, message scan limit = 4000)
02-19 12:18:00.224  3591  3647 W Bugle   : canonicalizeMccMnc: invalid mccmnc:null ,null
02-19 12:18:00.243   782  3714 D MmsServiceBroker: getCarrierConfigValues() by com.google.android.apps.messaging
02-19 12:18:00.243  1397  2593 D MmsService: getCarrierConfigValues
02-19 12:18:00.243  1397  2593 I MmsService: mms config for sub 1: Bundle[{httpSocketTimeout=60000, aliasMinChars=2, smsToMmsTextThreshold=8, enableSMSDeliveryReports=true, maxMessageTextSize=-1, supportMmsContentDisposition=true, enabledTransID=false, aliasEnabled=false, supportHttpCharsetHeader=false, allowAttachAudio=true, smsToMmsTextLengthThreshold=-1, recipientLimit=20, uaProfTagName=x-wap-profile, aliasMaxChars=48, maxImageHeight=1944, enableMMSDeliveryReports=false, userAgent=, config_cellBroadcastAppLinks=false, maxSubjectLength=80, httpParams=, enableGroupMms=false, emailGatewayNumber=6245, maxMessageSize=614400, naiSuffix=, enableMMSReadReports=false, maxImageWidth=2592, uaProfUrl=, enabledMMS=true, enabledNotifyWapMMSC=false, sendMultipartSmsAsSeparateMessages=false, enableMultipartSMS=true}]
02-19 12:18:00.244  3591  3647 I Bugle   : Carrier configs loaded: Bundle[{httpSocketTimeout=60000, aliasMinChars=2, smsToMmsTextThreshold=8, enableSMSDeliveryReports=true, maxMessageTextSize=-1, supportMmsContentDisposition=true, enabledTransID=false, aliasEnabled=false, supportHttpCharsetHeader=false, allowAttachAudio=true, smsToMmsTextLengthThreshold=-1, recipientLimit=20, uaProfTagName=x-wap-profile, aliasMaxChars=48, maxImageHeight=1944, enableMMSDeliveryReports=false, userAgent=, config_cellBroadcastAppLinks=false, maxSubjectLength=80, httpParams=, enableGroupMms=false, emailGatewayNumber=6245, maxMessageSize=614400, naiSuffix=, enableMMSReadReports=false, maxImageWidth=2592, uaProfUrl=, enabledMMS=true, enabledNotifyWapMMSC=false, sendMultipartSmsAsSeparateMessages=false, enableMultipartSMS=true}] from resources+system for subId=1
02-19 12:18:00.464  3591  3650 I BugleDataModel: SyncMessagesAction: All messages now in sync
02-19 12:18:00.468   782   793 I ActivityManager: Killing 3132:com.google.android.partnersetup/u0a11 (adj 15): empty #17
02-19 12:18:00.812   782   791 I art     : Background partial concurrent mark sweep GC freed 20139(1248KB) AllocSpace objects, 2(40KB) LOS objects, 31% free, 35MB/51MB, paused 1.523ms total 132.014ms
02-19 12:18:01.554   782   889 D ConnectivityService: notifyType CAP_CHANGED for NetworkAgentInfo [WIFI () - 101]
02-19 12:18:01.918   201   814 D audio_hw_primary: disable_audio_route: reset and update mixer path: low-latency-playback
02-19 12:18:01.918   201   814 D audio_hw_primary: disable_snd_device: snd_device(2: speaker)
02-19 12:18:03.597   782  4881 I ActivityManager: START u0 {act=android.intent.action.SEND typ=image/png flg=0xb080001 cmp=com.google.android.apps.messaging/.ui.conversationlist.ShareIntentActivity clip={image/png text/uri-list U:content://media/external/images/media/27578} (has extras)} from uid 10289 on display 0
02-19 12:18:03.601   201   814 D audio_hw_primary: out_set_parameters: enter: usecase(1: low-latency-playback) kvpairs: routing=2
02-19 12:18:03.622   201   814 D audio_hw_primary: select_devices: out_snd_device(2: speaker) in_snd_device(0: none)
02-19 12:18:03.622   201   814 D msm8974_platform: platform_send_audio_calibration: sending audio calibration for snd_device(2) acdb_id(15)
02-19 12:18:03.622   201   814 D audio_hw_primary: enable_snd_device: snd_device(2: speaker)
02-19 12:18:03.624   201   814 D audio_hw_primary: enable_audio_route: apply and update mixer path: low-latency-playback
02-19 12:18:03.646  3569  3569 E ResolverActivity: Unable to launch as uid 10289 package com.package.product, while running in android:ui
02-19 12:18:03.646  3569  3569 E ResolverActivity: java.lang.SecurityException: Uid 10289 does not have permission to uri 0 @ content://media/external/images/media/27578
02-19 12:18:03.646  3569  3569 E ResolverActivity:      at android.os.Parcel.readException(Parcel.java:1620)
02-19 12:18:03.646  3569  3569 E ResolverActivity:      at android.os.Parcel.readException(Parcel.java:1573)
02-19 12:18:03.646  3569  3569 E ResolverActivity:      at android.app.ActivityManagerProxy.startActivityAsCaller(ActivityManagerNative.java:2730)
02-19 12:18:03.646  3569  3569 E ResolverActivity:      at android.app.Instrumentation.execStartActivityAsCaller(Instrumentation.java:1725)
02-19 12:18:03.646  3569  3569 E ResolverActivity:      at android.app.Activity.startActivityAsCaller(Activity.java:4060)
02-19 12:18:03.646  3569  3569 E ResolverActivity:      at com.android.internal.app.ChooserActivity$ChooserTargetInfo.startAsCaller(ChooserActivity.java:659)
02-19 12:18:03.646  3569  3569 E ResolverActivity:      at com.android.internal.app.ResolverActivity.safelyStartActivity(ResolverActivity.java:790)
02-19 12:18:03.646  3569  3569 E ResolverActivity:      at com.android.internal.app.ResolverActivity.onTargetSelected(ResolverActivity.java:772)
02-19 12:18:03.646  3569  3569 E ResolverActivity:      at com.android.internal.app.ChooserActivity.onTargetSelected(ChooserActivity.java:338)
02-19 12:18:03.646  3569  3569 E ResolverActivity:      at com.android.internal.app.ResolverActivity.startSelected(ResolverActivity.java:621)
02-19 12:18:03.646  3569  3569 E ResolverActivity:      at com.android.internal.app.ChooserActivity.startSelected(ChooserActivity.java:343)
02-19 12:18:03.646  3569  3569 E ResolverActivity:      at com.android.internal.app.ChooserActivity$ChooserRowAdapter$2.onClick(ChooserActivity.java:1117)
02-19 12:18:03.646  3569  3569 E ResolverActivity:      at android.view.View.performClick(View.java:5204)
02-19 12:18:03.646  3569  3569 E ResolverActivity:      at android.view.View$PerformClick.run(View.java:21153)
02-19 12:18:03.646  3569  3569 E ResolverActivity:      at android.os.Handler.handleCallback(Handler.java:739)
02-19 12:18:03.646  3569  3569 E ResolverActivity:      at android.os.Handler.dispatchMessage(Handler.java:95)
02-19 12:18:03.646  3569  3569 E ResolverActivity:      at android.os.Looper.loop(Looper.java:148)
02-19 12:18:03.646  3569  3569 E ResolverActivity:      at android.app.ActivityThread.main(ActivityThread.java:5417)
02-19 12:18:03.646  3569  3569 E ResolverActivity:      at java.lang.reflect.Method.invoke(Native Method)
02-19 12:18:03.646  3569  3569 E ResolverActivity:      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
02-19 12:18:03.646  3569  3569 E ResolverActivity:      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)

为什么Messenger应用似乎无权访问此URI?

java.lang.SecurityException: Uid 10289 does not have permission to uri 0 @ content://media/external/images/media/27578

我使用的设备是运行Android 6.0.1的Nexus 5.

1 个答案:

答案 0 :(得分:0)

您是否在清单文件中设置了权限? 如果没有,则复制并粘贴此

HashSet<Integer> evenSet = new HashSet<>(even);
multipleOfThree.stream()
               .filter(((Predicate<Integer>) evenSet::contains).negate())

希望这会有所帮助..