从亚行外壳开始分享活动

问题描述:

我开始从亚行外壳共享活动。从亚行外壳开始分享活动

具体来说,我想实现与此相同(工作)的Java代码片断:

File dir = Environment.getExternalStorageDirectory(); 
    File yourFile = new File(dir, "/_tmp/1.jpg"); 

    Uri yourFileUri = Uri.fromFile(yourFile); 

    Intent sendIntent = new Intent(); 
    sendIntent.setAction(Intent.ACTION_SEND); 
    sendIntent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); 
    sendIntent.setType("image/*"); 
    sendIntent.putExtra(Intent.EXTRA_STREAM, yourFileUri); 
    sendIntent.setPackage("com.snapchat.android"); 
    startActivity(sendIntent); 

这里是我使用的命令:

adb shell am start -a android.intent.action.SEND -t image/jpeg --es android.intent.extra.STREAM file:///storage/emulated/0/_tmp/1.jpg com.snapchat.android --grant-read-uri-permission 

我目前面临的问题是该应用程序将打开并加载,闪烁黑色一秒但未能加载图像。

我已经检查了图片路径是通过发出以下命令工作,而在Android画廊开幕的图像:

adb shell am start -t image/jpeg -d file:///storage/emulated/0/_tmp/1.jpg 

我在做什么错?

编辑:

使用命令:

adb shell am start -a android.intent.action.SEND -t image/jpeg --es android.intent.extra.STREAM file:///storage/emulated/0/_tmp/1.jpg com.snapchat.android/com.snapchat.android.LandingPageActivity --grant-read-uri-permission 

给出了相同的结果,但是我将它比作在DDMS实际的通话,看到这里的区别:

登录通过手动共享通过电话:

10-19 18:01:54.020: D/HtcShareActivity(21561): onItemClick: position=0 activity=com.snapchat.android/com.snapchat.android.LandingPageActivity 

10-19 18:01:54.061: I/ActivityManager(724): START u0 {act=android.intent.action.SEND typ=image/jpeg flg=0x1 cmp=com.snapchat.android/.LandingPageActivity (has clip) (has extras)} from uid 10078 on display 0 

使用ADB命令进行日志记录:

10-19 18:04:29.096: I/ActivityManager(724): START u0 {act=android.intent.action.SEND typ=image/jpeg flg=0x10000000 cmp=com.snapchat.android/.LandingPageActivity (has extras)} from uid 2000 on display 0 

正如您所见,(has clip)不在亚行的调用中。

难道是--grant-read-uri-permission不是“工作”或至少没有给予足够的权限?

如何测试并最终解决此问题?

原来我不发送任何实际图像数据,我被简单地通过使用--es,然而一个URI需要发送一个字符串,因此,我应该使用--eu

更新以下命令:

adb shell am start -a android.intent.action.SEND -t image/jpeg --es android.intent.extra.STREAM file:///storage/emulated/0/_tmp/1.jpg com.snapchat.android/com.snapchat.android.LandingPageActivity --grant-read-uri-permission 

要:

adb shell am start -a android.intent.action.SEND -t image/jpeg --eu android.intent.extra.STREAM file:///storage/emulated/0/_tmp/1.jpg com.snapchat.android/com.snapchat.android.LandingPageActivity --grant-read-uri-permission 

解决了我的问题。

这不是因为忽略了@Dus建议的主要活动的声明。 (没想好虽然)

该命令可以一路被简化到:

adb shell am start -a android.intent.action.SEND -t image/jpeg --eu android.intent.extra.STREAM file:///storage/emulated/0/_tmp/1.jpg com.snapchat.android 
+0

对你有好处 - 你找到了你想要的命令。但你的根本原因分析是错误的。它为你修复的不是'-es' vs'--eu',而是'image/*'vs'image/jpeg'。 shell globbing(通配符扩展)破坏了您的原始命令。 –

+0

@AlexP。我可以向你保证我浪费了更多的时间来解决'--es' vs'--eu'谜题,而不是忘记编辑我在OP中做的复制和粘贴。好的眼睛,让我编辑它。 – Snowlav

你打开你的应用程序的意图,但是,你没有声明哪个活动应该处理意图,这就是为什么你看到一个闪烁,然后关闭 - 一个活动需要处理意图。

您需要在您的命令中声明应该处理意图的MainActivity

例如:

adb shell am start -a android.intent.action.SEND -t image/* --es 
android.intent.extra.STREAM file:///storage/emulated/0/_tmp/1.jpg 
com.snapchat.android/FULL_PATH_OF_YOUR_ACTIVITY 

其中FULL_PATH_OF_YOUR_ACTIVITY应该是活动声明为您的清单主要活动。

adb shell am start -a android.intent.action.SEND -t image/* --es 
android.intent.extra.STREAM file:///storage/emulated/0/_tmp/1.jpg 
com.snapchat.android/com.snapchat.android.sub.MainActivity 

样品清单:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.snapchat.android"> 

    <application 
     android:theme="@style/AppTheme"> 
     <activity android:name="com.snapchat.android.sub.MainActivity"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
    </application> 

</manifest> 
+0

衷心感谢你为你的回应。我仔细阅读了它,并用我的发现编辑了OP。 – Snowlav

+0

我终于能够解决我的问题。虽然你的回应没有直接解决主要问题,但它确实使我朝着正确的方向前进。因此,我会奖励你的奖金(8小时)。感谢您的帮助。 – Snowlav