2012-03-07 8 views
3

「共有」を使用して、自分の携帯電話(Samsung Galaxy S2)からサーバーに画像をアップロードできるアプリを作成しました。< my app> AndroidギャラリーPicasaの画像をAndroidアプリに共有する

ただし、私のアプリは、Picasaでオンラインになっている画像の「​​共有」メニューには表示されません。私はどのようにギャラリーに表示されるすべての種類の画像を扱うことができるのだろうか?電話/ SDカードにローカルに保存され、Picasaなどのリモートに保存されていますか?

mimeタイプ "image/*"にインテントフィルタがありますが、何らかの理由で(?)これがPicasaイメージと一致しないと思われます。私のAndroidManifest.xmlから

:いくつかの苦労の後

<activity 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" 
     android:name=".PublishImageActivity" 
     android:theme="@style/Theme.Custom" > 
     <intent-filter > 
      <action android:name="android.intent.action.SEND" /> 

      <category android:name="android.intent.category.DEFAULT" /> 

      <data android:mimeType="image/*" /> 
     </intent-filter> 
    </activity> 
    <activity 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" 
     android:name=".PublishImageActivity" 
     android:theme="@style/Theme.Custom" > 
     <intent-filter > 
      <action android:name="android.intent.action.CHOOSER" /> 

      <category android:name="android.intent.category.DEFAULT" /> 

      <data android:mimeType="image/*" /> 
     </intent-filter> 
    </activity> 

答えて

2

、および優れたアプリ「意図インターセプト」を使用して、私は、Picasaの画像は、MIMEタイプ「text/plainの」を持っていることを発見し、彼らが持っていますIntent.EXTRA_TEXTのURL文字列。

私はこれを回避するために、上記のようなインテントフィルタを追加しましたが、マニフェストの "text/plain"に追加しました。

 <intent-filter > 
      <action android:name="android.intent.action.SEND" /> 

      <category android:name="android.intent.category.DEFAULT" /> 

      <data android:mimeType="text/plain" /> 
     </intent-filter> 

活動で..Andに、Intent.EXTRA_TEXTの値はインテントにバンドルされているかどうかを確認 - もしそうなら、それを取得し、それがHTTPリンクだかどうか確認...もしそうなら - から画像をダウンロードしますURL。

if (Intent.ACTION_SEND.equals(intent.getAction())) { 
     Bundle extras = intent.getExtras(); 
     if (extras.containsKey(Intent.EXTRA_TEXT)) { 
      Uri uri = Uri.parse((String) extras.getCharSequence(Intent.EXTRA_TEXT)); 
      if (uri != null) { 
       String scheme = uri.getScheme(); 
       if (scheme.equals("http")) { 
        downloadImage(uri); 
        // ... 

しかし、私はまだこれを処理するより良い方法があるのですか?私は今、URLが実際に画像やその他のいたずらなものを指していることを保証していないような気がします:-)

関連する問題