Handle download intents in my app

前端 未结 2 608
星月不相逢
星月不相逢 2021-02-13 19:31

My webview app already handles external URL\'s fine (opens links from external apps like viber, browsers, etc) like this- (i got this code from here)

// get URL          


        
相关标签:
2条回答
  • 2021-02-13 20:06

    You need to put below code in your activity which response the intent,

    void onCreate(Bundle savedInstanceState) {
        // Get intent, action and MIME type
        Intent intent = getIntent();
        String action = intent.getAction();
        String type = intent.getType();
    
        if (Intent.ACTION_VIEW.equals(action))
        {
            */if (type.startsWith("image/“))
              {*/
                downloadImage(intent); // Download image being sent
            }
        }
    
    void downloadImage(Intent intent) {
        Uri imageUri = (Uri) intent.getParcelableExtra(Intent.EXTRA_STREAM);
        if (imageUri != null) {
            // Write Your Download Code Here
        }
    }
    
    0 讨论(0)
  • 2021-02-13 20:21

    you have to solve issues to

    • (a) always show the chooser
    • (b) tell android that your app should become part of the chooser
    • (c) process the "download"

    (a) always show the chooser

    replace

    startActivity(i);
    

    with

    startActivity(Intent.createChooser(i, "caption of the choser"));
    

    (b) tell android that your app should become part of the chooser

    In the manifest you have to declare that you have an activity that can handle the relevant content

    <manifest ... >
        <application ... >
            <activity android:name=".MyDownloadActivity" ...>
                <intent-filter >
                    <action android:name="android.intent.action.VIEW" />
                    <action android:name="android.intent.action.SEND" />
                    <action android:name="android.intent.action.SENDTO" />
    
                    <category android:name="android.intent.category.DEFAULT" />
                    <category android:name="android.intent.category.BROWSABLE" />
    
                    <data
                        android:mimeType="*/*"
                        android:scheme="file" />
                </intent-filter>
                <intent-filter > <!-- mime only SEND(_TO) -->
                    <action android:name="android.intent.action.SEND" />
                    <action android:name="android.intent.action.SENDTO" />
                    <action android:name="android.intent.action.VIEW" />
    
                    <category android:name="android.intent.category.DEFAULT" />
                    <category android:name="android.intent.category.BROWSABLE" />
                    <category android:name="android.intent.category.CATEGORY_OPENABLE" />
    
                    <!--
                    these do not work :-(
                    <data android:scheme="content" android:host="*"  />
                    <data android:scheme="content" 
                        android:host="media" 
                        android:pathPattern="/external/images/media/.*" />
                    <data android:host="*" android:scheme="content" 
                        android:mimeType="image/*" />
                    -->
                    <data android:mimeType="*/*" />
                </intent-filter>
            </activity>
        </application>
    
    </manifest>
    

    * (c) process the "download"

    MyDownloadActivity Your MyDownloadActivity.onCreate() will receive all mime-types * / * for SEND, SENDTO, VIEW. For Details see @Vickyexpert-s answer

    intent-intercept is a free android tool to analyse intents. it can intercept nearly every intent. you can look at the sourcecode to see how this is done.

    I use sendtosd as my general purpose download handler. It-s sourcecoder is available on github

    0 讨论(0)
提交回复
热议问题