从亚行外壳开始分享活动
问题描述:
我开始从亚行外壳共享活动。从亚行外壳开始分享活动
具体来说,我想实现与此相同(工作)的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
答
你打开你的应用程序的意图,但是,你没有声明哪个活动应该处理意图,这就是为什么你看到一个闪烁,然后关闭 - 一个活动需要处理意图。
您需要在您的命令中声明应该处理意图的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>
对你有好处 - 你找到了你想要的命令。但你的根本原因分析是错误的。它为你修复的不是'-es' vs'--eu',而是'image/*'vs'image/jpeg'。 shell globbing(通配符扩展)破坏了您的原始命令。 –
@AlexP。我可以向你保证我浪费了更多的时间来解决'--es' vs'--eu'谜题,而不是忘记编辑我在OP中做的复制和粘贴。好的眼睛,让我编辑它。 – Snowlav