5

Mevcut etkinliğe (Whatsapp, Mesajlaşma uygulaması, vb) resim gönderme yeteneğine sahip olması gereken bir Klavye uygulaması uygulamaya çalışıyorum.Android Image with Keyboard göndermek

Bunu gerçekten başarmanın bir yolu var mı? Tabii ki görüntüleri kabul eden uygulamalarla sınırlı olacaktı, ama en iyi yaklaşımın ne olduğunu merak ediyorum.

Bir ImageSpan ile bir StringBuilder kullanarak çalıştı, ancak işe yaramadı. Daha iyi bir yol olup olmadığını merak ediyordum. Intents kullanmak belki?

+0

Henüz bir çözüm buldunuz mu? –

+0

"Android'in önceki sürümlerinde, (ayrıca giriş yöntemi düzenleyicileri veya IME'ler olarak da bilinir) yumuşak klavyeler, uygulamalara yalnızca unicode emoji gönderebilir. Zengin içerik için, uygulamalar, diğer uygulamalarda kullanılamayan uygulamaya özel API'ler oluşturmak zorundaydı veya Easy Share Action veya pano aracılığıyla görüntüleri göndermek gibi geçici bir çözüm kullanın. " https://developer.android.com/preview/image-keyboard.html – hrules6872

cevap

3

Nihayet, ön plan uygulamasına Intents'ı göndererek bunu başardı, ancak bu sınırlamalara sahip: mesajlaşma uygulamaları genellikle, kullanıcının akışını kıran ve gereksiz bir adım ekleyen (örneğin, belirli bir sohbet). aşağıdaki gibi

Bu

elde edilebilir:

getCurrentAppPackage(...)
Intent sendIntent = new Intent(); 
    sendIntent.setAction(Intent.ACTION_SEND); 
    sendIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); 
    sendIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    sendIntent.setPackage(getCurrentAppPackage(context, editorInfo)); 
    return sendIntent; 

bir giriş alanına binded ne zaman IME uygulanmasından elde edebilirsiniz bir Context ve EditorInfo verilen ön plan Aktivite, döndüren bir yöntemdir.

public String getCurrentAppPackage(Context context, EditorInfo info) { 
    if(info != null && info.packageName != null) { 
     return info.packageName; 
    } 
    final PackageManager pm = context.getPackageManager(); 
    //Get the Activity Manager Object 
    ActivityManager aManager = 
      (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); 
    //Get the list of running Applications 
    List<ActivityManager.RunningAppProcessInfo> rapInfoList = aManager.getRunningAppProcesses(); 
    //Iterate all running apps to get their details 
    for (ActivityManager.RunningAppProcessInfo rapInfo : rapInfoList) { 
     //error getting package name for this process so move on 
     if (rapInfo.pkgList.length == 0) { 
      Log.i("DISCARDED PACKAGE", rapInfo.processName); 
      continue; 
     } 
     try { 
      PackageInfo pkgInfo = pm.getPackageInfo(rapInfo.pkgList[0], PackageManager.GET_ACTIVITIES); 
      return pkgInfo.packageName; 
     } catch (PackageManager.NameNotFoundException e) { 
      // Keep iterating 
     } 
    } 
    return null; 
} 

Güncelleme: Content API Teslim API düzeyinde 25 (ve destek kitaplığı bu API 13 dan iş yapar) üzerine eklenmiştir. Daha fazla bilgi için: https://developer.android.com/preview/image-keyboard.html Uygulamalar uygulamaya geçene kadar, yukarıdaki yöntem geri dönüş olarak kullanılabilir.

+0

Merhaba Framundo, kodunuzu ön plan etkinliğine nasıl paylaştığınızı görüntüleyebilir misiniz? Ayrıca, İçeriği Taahhütle ilgili olarak, uygulamanın zengin içerikler alabilmesi ve çok yeni olduğu için çok fazla uygulamanın bulunmaması gerektiğini unutmayın. Yani bence her iki seçenek de uygulanmalıdır. –

+0

Katılıyorum, örnek kodu dahil etmek için cevabı düzenlediniz ve manuel yönteme geri dönüş konusunda uyarınız. – framundo