从ADB shell启动共享活动

时间:2017-10-16 19:33:02

标签: android android-intent android-activity adb

我从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;工作"或者至少没有给予足够的许可?

我如何测试并最终解决这个问题?

2 个答案:

答案 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