我正在开发一个Android定制的键盘,我想送胶粘物给我的朋友,例如Hangouts上从我的键盘.我为此添加了一些png.
当我使用android的共享api时,我必须首先选择要与之分享的应用程序.是否可以从键盘检测当前打开的应用程序?例如,如果我正在与环聊聊天,那么我想调用意图告诉它与"com.something.hangouts"分享
如果我在FB messenger然后告诉它"com.something.facebook.messenger"等...
我试着像这样:
fun getOpenedApplication() {
var am = this.getSystemService(ACTIVITY_SERVICE) as ActivityManager;
var l = am.getRecentTasks(1,
ActivityManager.RECENT_WITH_EXCLUDED);
var i = l.iterator();
var pm = this.packageManager;
while (i.hasNext()) {
try {
var intent = i.next().baseIntent;
var list = pm.queryIntentActivities(intent,
PackageManager.MATCH_DEFAULT_ONLY);
var c = pm.getApplicationLabel(pm.getApplicationInfo(
list[0].activityInfo.packageName,
PackageManager.GET_META_DATA));
Toast.makeText(this, "Application name: " + c.toString(),
Toast.LENGTH_LONG).show();
} catch (e: Exception) {
Toast.makeText(this,
"Application name not found: " + e.toString(),
Toast.LENGTH_LONG).show();
}
}
}
Run Code Online (Sandbox Code Playgroud)
但是效果不好......它会发回发射器或键盘.(随机)
我试图从最近的应用程序列表中获取第一个应用程序,但它无法正常工作
小智 9
这是非常容易的任务.
String packageName = getCurrentInputEditorInfo().packageName;
Run Code Online (Sandbox Code Playgroud)
InputMethodService类的方法.
对于 Android L 及以上版本,请使用:
ActivityManager activityManager = (ActivityManager) newContext.getSystemService(Context.ACTIVITY_SERVICE);
List<RunningAppProcessInfo> runAppProcessesList = activityManager.getRunningAppProcesses();
for (RunningAppProcessInfo runAppProcess : runAppProcessesList) {
if (runAppProcess.importance == RunningAppProcessInfo.IMPORTANCE_FOREGROUND) {
Log.d("current foreground App", runAppProcess.processName);
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1301 次 |
最近记录: |