框架的某些部分对我来说还不是很清楚.我熟悉输入事件的流程(内核 - > Eventhub - > InputReader - > InputDispatcher - > ...).
情况
(要求:在不更改Android框架的情况下处理输入键.)
我想处理来自设备(键盘/游戏手柄/控制器/ ...)的关键事件,但有一些要求.首先,我不想改变Android框架.这意味着,我不想扩展WindowManagerPolicy其功能,例如interceptKeyBeforeDispatching处理主键的功能.这将导致将键事件分派到应用程序层中,这很好.缺点是,我在这里有另一个棘手的要求.示例:当我在玩"愤怒的小鸟"时,我按下连接的输入设备上的GoToAlpha按钮,Alpha应用程序必须启动.愤怒的小鸟不知道哪个按钮GoToAlpha是,不会处理/识别它,并且例如没有广播的意图来启动我的Alpha应用程序.
题
有没有办法在调度后处理我的(自定义)键事件,知道前台的应用程序无法处理密钥?
我的(失败的)解决方案
创建一个处理关键事件的服务.这是不可能的,因为像愤怒的小鸟这样的应用程序不会绑定到我的服务,并且关键事件不会被我的服务捕获.如果我错了,请提供更多信息:).
创建一个外部库,我允许我的应用程序的活动从我自己的ActivityBase继承.所有关键事件和默认行为都可以在这里处理.在下方,现有应用程序将不支持我的自定义键事件,因为它们不使用库.
扩展框架在我看来是最干净的解决方案,但这将导致不符合我的要求.
任何帮助或有用的信息将不胜感激
额外
如果第一个问题可以通过这种或那种方式解决..我想
Intent在GoToAlpha按钮后面自定义我.这意味着..默认情况下,Alpha应用程序将启动,但在用户自定义之后,Beta应用程序将从现在开始启动..有什么想法吗?
谢谢
我正在使用Intent在新任务中启动一个新的Activity.此Intent在其附加内容中携带该Activity所需的一些私有数据.其他应用程序不应读取此数据.我们已经调查过这些数据是否确实没有泄露.我们发现通过使用getRecentTasks()中的RecentTaskInfo,任何具有GET_TASK权限的任意应用程序都可以读取这些额外数据.这不是很安全.一旦发现这个泄漏,我们就停止了搜索.这些数据泄露的方式有多少?而且,我如何确保其他应用程序无法读取额外数据?
我正在处理一个包含三个片段的应用程序,这些片段在XML文件中定义:
[HeaderFragment]
[MainFragment]
[FooterFragment]
Run Code Online (Sandbox Code Playgroud)
第一个屏幕启动三个片段,Header-和FooterFragment是静态的,因此不会更改内容.
MainFragment是一个初始菜单,带有按钮和透明背景(MenuFragment).当我单击菜单中的项目时,我将替换MenuFragment为新的片段(DetailsFragment),如下所示:
FragmentTransaction transaction = mFragmentManager.beginTransaction();
Fragment newFragment = new DetailFragment();
transaction.replace(R.id.content_container, newFragment);
transaction.addToBackStack(newFragment.getTag());
transaction.commit();
Run Code Online (Sandbox Code Playgroud)
在DetailFragment显示出来,当我按下回来,MenuFragment出现一切工作应该如何.
这是我的问题:
在我的内部DetailFragment,我有一个切换选项来过滤内容,这是一个按钮.单击此按钮时,将以与上述代码相同的方式DetailFragmentFiltered替换DetailFragment.唯一的区别是我没有将它添加到BackStack,因为在过滤并按下Back后..我仍然想要返回到MenuFragment.
当我单击过滤器按钮并按Back时,DetailFragment(或DetailFragmentFiltered)显示在我的后面MenuFragment.那么,我不想要这个.
我有用于列表视图,其内部包括复选框5次定制arrayadapter,在这里,我要实现的选择列表视图中所有的复选框,并取消所有复选框,我试着用getchildat()的方法oncreate(),onresume()以及onpostcreate同时,但不做出运气给我.如果你能告诉我解决方案,我很感激.
@Override
public void onPostCreate(Bundle savedInstanceState){
super.onPostCreate(savedInstanceState);
Button selectall=(Button) findViewById(R.id.allselect);
selectall.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
int count = listview.getCount();
System.out.println("the count is "+count);
for (int i = 0; i < listview.getLastVisiblePosition() - listview.getFirstVisiblePosition(); i++) {
RelativeLayout itemLayout = (RelativeLayout)listview.getChildAt(i);
CheckBox cb = (CheckBox)itemLayout.findViewById(R.id.chkbx);
cb.setChecked(true);
}
}
});
}
Run Code Online (Sandbox Code Playgroud)
Arrayadapter类
@SuppressWarnings("unchecked")
public MultipleLeadSyncAdapter(Context context, String[] values,String[] values1,List<Model> qrcode ,String[] values3,String[] values4,String[] values5) {
super(context, R.layout.multipleselectlist, values1);
this.context = context; …Run Code Online (Sandbox Code Playgroud)