Articles of android activity

Android – 活动外的startActivityForResult?

我有一个包装类(BluetoothDiscoverer),它在服务中实例化。 此类获取BluetoothAdapter并在扫描相邻设备之前检查是否启用了蓝牙。 现在,如果未启用蓝牙,我希望能够在此类(BluetoothDiscoverer)中执行以下操作: Intent enableBluetoothIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE); startActivityForResult(enableBluetoothIntent, BLUETOOTH_ENABLER); 现在我已经读过这个: 从非活动中使用startActivityForResult 但我不想将我的Main Activity传递给这个对象,因为我想在BluetoothDiscoverer类中处理结果(用户是否接受启用蓝牙)。 现在如果我使BluetoothDiscoverer成为Activity的子类 当startActivityForResult即将被调用时,我似乎得到一个NullPointerException。 我想这是因为我需要添加一个onCreate()/ onDestroy()方法,但这会破坏我正在做的目的,因为我需要能够在实例化该类的服务中调用BluetoothDiscoverer对象上的方法。 我还需要注册广播接收器,以便在启动扫描时检索相邻设备。 如果BluetoothDiscoverer类不是Activity,我该如何注册此接收器? 有没有解决这个问题? 谢谢安德烈亚斯

具有透明背景的PreferenceFragment?

我创建了一个包含两个类别和一个checkbox的PreferenceFragment,但是,当我在我的应用程序中显示它时,背景看起来是透明的。 我可以看到主要活动,字段和PreferenceFragment已经放在主要活动的顶部…这个解决方案是什么? 在我的主要活动中,我这样做是为了在选择设置按钮时打开PreferenceFragment: @Override public boolean onOptionsItemSelected(MenuItem item) { //handle presses on action bar items switch (item.getItemId()) { case R.id.action_settings: getFragmentManager().beginTransaction().replace(android.R.id.content, new SettingsFragment()).commit(); return true; default: return super.onOptionsItemSelected(item); } } 我的PreferenceFragment代码如下所示:public class SettingsFragment extends PreferenceFragment { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //load the preferences from an XML resource addPreferencesFromResource(R.xml.preferences); } } 我的preferences.xml看起来像这样: 我尝试了Stack […]

Flag Activity Clear Top会破坏目标活动而不是创建目标活动

我正在观看Intent.FLAG_ACTIVITY_CLEAR_TOP的行为。 例如,我有三个活动A,B和C现在Flow是A – > B – > C. 现在,当我使用此标志从C开始A时,使用以下代码。 Intent intent_to_a=new Intent(C.this,A.class); intent_to_home.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity(intent_to_a); AFAIK,Intent.FLAG_ACTIVITY_CLEAR_TOP应该删除B并且应该恢复A。它也会以相同但奇怪的方式执行。 它删除B,而不是删除A而不是创建A.还调用了A的onDestroy方法。 任何人都可以告诉我它是否合适? 如果我不想让它毁灭我该怎么办?

片段之间的事务仅在一个ActionBar选项卡内

我有一个带有三个选项卡(ActionBar选项卡)的应用程序,每个选项卡一次只有一个片段。 TabListener TabsActivity Tab1 – > ListFragment1 – > ListFragment2 – > Fragment3 Tab2 – > Tab2Fragment Tab3 – > Tab3Fragment 问题是当我从ListFragment1到ListFragment2创建FragmentTransaction(在OnListItemClicked内)时,其他选项卡中的片段也会更改为ListFragment2。 最后,我想仅在选项卡内更改片段并保留其他选项卡的状态。 我已经保存了状态(OnSavedInstance())。 你知道我在这里缺少什么吗? 一些代码: public class TabsActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.tabs); // setup Action Bar for tabs ActionBar actionBar = getActionBar(); actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); // instantiate fragment for […]

Android内存管理粒度 – 活动还是流程?

我看到不一致的文档和讨论有关Android内存不足时所发生的事情以及操作系统重新声明内存的步骤。 更具体地说,Android会以活动/片段或整个过程的粒度杀死吗? 例如,如果在活动A前面启动了活动B(并且两个活动都是同一个应用程序/进程的一部分),则活动A可以被操作系统杀死,而活动B位于前台,用户正在与活动B交互(假设:屏幕保持打开,当前应用程序保留在前台,没有发生方向更改)? 2011年的答案 (由Dianne Hackborn在谷歌的Android团队中)表明,Android会以流程的粒度而不是活动来杀死。 在重新创建活动的Android开发者页面上,它说: 如果系统当前已停止且未长时间使用或前台活动需要更多资源,系统也可能会破坏您的活动,因此系统必须关闭后台进程才能恢复内存。 注意歧义:“系统必须关闭后台进程 ”。 在OnSaveInstanceState的Android Developer页面上,它说: 例如,如果活动B在活动A前面启动,并且在某些时候活动A被杀死以回收资源,活动A将有机会通过此方法保存其用户界面的当前状态 在阅读了这些以及许多其他文档页面和在线讨论之后,目前尚不清楚正确的答案是什么。 我也有关于片段的相同问题:由于内存不足而导致背景片段被杀死,而整个过程是否被杀死?

刷新一个微调器

我有一个旋转器的视图。 活动通过popup窗口启动另一个活动,我在其中添加或删除父级在Spinner中显示的值。 因此,在onActivityResult()中,我通过调用fillSpinner()方法刷新Spinner的内容,以便它反映任何其他或删除的值。 此方法的参数是先前选择的值: private void fillSpinner(String value){ Cursor c = mDbHelper.getAllCategories(); startManagingCursor(c); c.moveToFirst(); String[] from = new String[]{DBAdapter.KEY_CATEGORY}; SimpleCursorAdapter scCats = new SimpleCursorAdapter( this, android.R.layout.simple_spinner_item,c,from, new int[]{android.R.id.text1}); scCats.setDropDownViewResource( android.R.layout.simple_spinner_dropdown_item); category.setAdapter(scCats); if (value != null && value != “”) { category.setSelection((int)mDbHelper.categoryIndex(value)); } } 当我打开微调器时,它包含正确的列表(即它被刷新)并选择了正确的值。 但是,Spinner控件本身(处于关闭状态)不会显示所选值,而是显示列表中的第一个值。 当我逐步调试调试器中的代码时,Spinner值在调用setSelection()之前和之后都是正确的(并且始终使用相同的正确id调用它)。 但是,由于我无法退出事件,当我在短时间内恢复执行后,Spinner中的值会发生变化。 换句话说,当我从popup活动返回时,微调器显示的字符串被更改并且与所选项不同。 任何想法都表示赞赏。

Android中的活动识别无效

我试图从应该显示用户活动的新Google位置API编译示例代码。 喜欢步行,车辆等 该示例的链接是http://developer.android.com/training/location/activity-recognition.html 就我而言,我可以看到Google Play服务可用,位置服务连接也很好,但之后没有任何内容。 onHandleIntent从未被明显调用过。 有人试图让它发挥作用吗? 或者,互联网上还有其他一些工作示例吗? 谢谢

关闭应用程序时调用的方法是什么

我阅读了有关活动生命周期及其方法的所有内容。 我仍然无法find答案:当我关闭我的应用程序时,从“打开应用程序”菜单(在galaxy4中,长按主页按钮,在nexus5中它是正确的按钮……)正在调用什么方法? 如果有的话? 换句话说,我的活动是启动服务。 如果app(活动)被关闭,我想终止服务。 (onDestory根本不可靠,如前所述多次) 提前致谢!

在onCreate中开始一项新活动仅适用于延迟

我有一个简单的活动,只显示两个按钮,我想加载另一个活动,一旦完成加载。 @Override public void onCreate(Bundle savedInstanceState) { dbg(“starting on create”); super.onCreate(savedInstanceState); dbg(“stting content view”); setContentView(R.layout.main); createDrPopup(); } private void createDrPopup(){ dbg( “created new activity”); startActivityForResult(new Intent(this, DrPopup.class), DR_POPUP_ACTIVITY_ID); } 我没有使用此代码的任何错误,但新活动无法正确加载。 这样我只能获得一个空白屏幕。 但如果我延迟调用新活动,那么一切正常。 @Override public void onCreate(Bundle savedInstanceState) { dbg(“starting on create”); super.onCreate(savedInstanceState); dbg(“stting content view”); setContentView(R.layout.main); Thread splashTread = new Thread() { @Override public void […]

获取当前运行活动的实例?

我想要做的是将动作事件发送到当前正在运行的活动。 我从这段代码中获得了当前活动的ComponentName ActivityManager am = (ActivityManager) getSystemService(ACTIVITY_SERVICE); // get the info from the currently running task List taskInfo = am.getRunningTasks(1); Log.d(“current task :”, “CURRENT Activity ::” + taskInfo.get(0).topActivity.getClassName()); ComponentName componentInfo = taskInfo.get(0).topActivity; 现在我有了组件名称,我想调度该事件 dispatchTouchEvent(MotionEvent ev) 这是在Activity类中,要做到这一点,我需要一个当前活动的实例。 我被困在组件名称。 如何获取Activity实例以便我可以调度该事件?