मैं अपने एंड्रॉइड ऐप में एक बटन बनाने की कोशिश कर रहा हूं जो उपयोगकर्ता को सोशल मीडिया नेटवर्क की अपनी पसंद का उपयोग करके एक छवि साझा करने की अनुमति देता है। छवि फ़ाइल ऐप के संपत्ति फ़ोल्डर में संग्रहीत है।एंड्रॉइड: मैसेजिंग, जी +, ट्विटर, फेसबुक के माध्यम से संपत्तियों से संपत्ति को विश्वसनीय रूप से साझा करें?
मेरी योजना छवि पर बाहरी पहुंच देने के लिए कस्टम सामग्री प्रदाता को लागू करना है, फिर मेरे सामग्री प्रदाता के भीतर छवि के यूरी को निर्दिष्ट करने वाला TYPE_SEND इरादा भेजें।
मैंने यह किया है और यह Google+ और जीमेल के लिए काम करता है, लेकिन अन्य सेवाओं के लिए यह विफल रहता है। सबसे कठिन हिस्सा मुझे अपने ContentProvider की क्वेरी() विधि से वापस लौटने के बारे में जानकारी प्राप्त कर रहा है। कुछ ऐप्स एक प्रक्षेपण निर्दिष्ट करते हैं (उदा। Google+ _id और _data के लिए पूछता है), जबकि कुछ ऐप्स प्रक्षेपण के रूप में शून्य हो जाते हैं। यहां तक कि प्रक्षेपण निर्दिष्ट किया गया है, मुझे नहीं पता कि कॉलम में वास्तविक डेटा (प्रकार) की अपेक्षा की जाती है। मुझे इस पर कोई दस्तावेज नहीं मिल रहा है।
मैंने ContentProvider की openAssetFile विधि भी लागू की है और इसे कॉल किया जाता है (Google+ द्वारा दो बार!) लेकिन फिर अनिवार्य रूप से क्वेरी विधि भी कॉल की जाती है। क्वेरी विधि का नतीजा केवल गिनती प्रतीत होता है।
कोई विचार जहां मैं गलत हो रहा हूं? मुझे अपनी क्वेरी विधि से क्या लौटना चाहिए?
नीचे कोड:
// my intent
Intent i = new Intent(android.content.Intent.ACTION_SEND);
i.setType("image/jpeg");
Uri uri = Uri.parse("content://com.me.provider/ic_launcher.jpg");
i.putExtra(Intent.EXTRA_STREAM, uri);
i.putExtra(android.content.Intent.EXTRA_TEXT, text);
startActivity(Intent.createChooser(i, "Share via"));
// my custom content provider
public class ImageProvider extends ContentProvider
{
private AssetManager _assetManager;
public static final Uri CONTENT_URI = Uri.parse("content://com.me.provider");
// not called
@Override
public int delete(Uri arg0, String arg1, String[] arg2)
{
return 0;
}
// not called
@Override
public String getType(Uri uri)
{
return "image/jpeg";
}
// not called
@Override
public Uri insert(Uri uri, ContentValues values)
{
return null;
}
@Override
public boolean onCreate()
{
_assetManager = getContext().getAssets();
return true;
}
@Override
public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder)
{
MatrixCursor c = new MatrixCursor(new String[] { "_id", "_data" });
try
{
// just a guess!! works for g+ :/
c.addRow(new Object[] { "ic_launcher.jpg", _assetManager.openFd("ic_launcher.jpg") });
} catch (IOException e)
{
e.printStackTrace();
return null;
}
return c;
}
// not called
@Override
public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs)
{
return 0;
}
// not called
@Override
public String[] getStreamTypes(Uri uri, String mimeTypeFilter)
{
return new String[] { "image/jpeg" };
}
// called by most apps
@Override
public AssetFileDescriptor openAssetFile(Uri uri, String mode) throws FileNotFoundException
{
try
{
AssetFileDescriptor afd = _assetManager.openFd("ic_launcher.jpg");
return afd;
} catch (IOException e)
{
throw new FileNotFoundException("No asset found: " + uri);
}
}
// not called
@Override
public ParcelFileDescriptor openFile(Uri uri, String mode)
throws FileNotFoundException
{
return super.openFile(uri, mode);
}
}
क्या आप इसे समझने में सक्षम थे? मैंने अभी तक यह फेसबुक के लिए काम नहीं देखा है। – selsine