2017-10-16 47 views
1

我開始從亞行外殼共享活動。從亞行外殼開始分享活動

具體來說,我想實現與此相同(工作)的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不是「工作」或至少沒有給予足夠的權限?

如何測試並最終解決此問題?

回答

0

原來我不發送任何實際圖像數據,我被簡單地通過使用--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

0

你打開你的應用程序的意圖,但是,你沒有聲明哪個活動應該處理意圖,這就是爲什麼你看到一個閃爍,然後關閉 - 一個活動需要處理意圖。

您需要在您的命令中聲明應該處理意圖的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