我从ADB shell开始分享活动。
具体来说,我正在努力实现与此(工作)java-snippet相同:
_ViewImports
以下是我正在使用的命令:
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);
我目前面临的问题是Snapchat应用程序将打开并加载,闪烁黑色一秒但无法加载图像。
我已经通过发出以下命令检查图像的路径是否有效,并在android库中打开图像:
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
我做错了什么?
编辑:
使用命令:
adb shell am start -t image/jpeg -d file:///storage/emulated/0/_tmp/1.jpg
给出了相同的结果,但是我把它与DDMS中的实际调用进行了比较,请看这里的区别:
通过手机手动共享记录:
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命令进行记录:
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)
不是"#34;工作"或者至少没有给予足够的许可?
我如何测试并最终解决这个问题?
答案 0 :(得分:1)
你打算用意图打开你的应用程序,但是,你没有声明哪个Activity应该处理意图,这就是为什么你看到一个闪烁然后关闭 - 一个Activity需要处理意图。
您需要在命令中声明应该处理意图的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>
答案 1 :(得分:1)
事实证明我没有发送任何真实的图片数据,我只是使用--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