Articles of android intent

使用Intent.FLAG_ACTIVITY_MULTIPLE_TASK是否安全?

背景 让我们来看下一个场景: 用户使用具有多个活动的应用X(如gmail应用)。 在浏览应用程序X之后,他会去你的应用程序。 在您的应用中,您需要使用意图启动此X应用,以转到其中的特定活动。 现在,用户转到应用X上的此特定活动。 用户按下后退按钮,希望返回到您的应用程序而不是停留在应用程序X上。 另一个类似的场景 用户在活动之间浏览您的应用。 你的应用程序转到后台(例如,使用主页按钮)。 您的应用会显示一个通知,一旦点击,它就会打开您应用的特定活动。 用户点击通知并转到您应用的特定活动。 用户按下后退按钮,希望返回到单击通知之前显示的应用程序,而不是转到上次离开时​​显示的应用程序上的上一个活动。 似乎两种方案的最后一步都不是默认行为。 这就是为什么我为此寻找了最好的旗帜组合。 问题 似乎可以实现我所描述的行为的唯一标志是Intent.FLAG_ACTIVITY_MULTIPLE_TASK (与Intent.FLAG_ACTIVITY_NEW_TASK一起)。 但是,根据android API,不建议将此标志用于正常使用: 除非您要实现自己的顶级应用程序启动器,否则请勿使用此标志。 … 由于默认系统不包含图形任务管理,因此除非您为用户提供某种方式返回已启动的任务,否则不应使用此标志。 这些信息似乎与关于意图的其他描述一样令人困惑。 我见过其他的Intent标志,比如Intent.FLAG_ACTIVITY_CLEAR_TASK ,它们可以实现类似的结果,但它们有奇怪的行为和/或它们使用高API 这个问题 使用这个标志是否安全? 它有什么好的替代品吗? 使用此标志的危险是什么?使用它的API的描述含义是什么?

为什么启动我的活动的Intent不包含我在发送给startActivity()的Intent中放入的额外数据?

我最初解释得很糟糕。 这是我的问题:我发送给startActivity()方法的Intent包含一个私有字段mMap,它是一个包含我发送给putExtra()的字符串的Map。 当目标活动开始时,对getIntent()的调用将返回不包含这些值的Intent。 mMap字段为空 。 显然,View层次结构的内容或启动新活动的OS部分创建了一个新的Intent传递给它,因为对象ID是不同的。 但为什么? 为什么putData()值没有携带fowrard到新的Intent? 启动新活动的活动会扩展活动。 这是启动代码: public boolean onOptionsItemSelected(final MenuItem item) { switch (item.getItemId()) { case 4: i = new Intent(this, StatList.class); i.putExtra(“Name1”, “Test1”); i.putExtra(“Name3”, “Test2”); startActivity(i); } } 我已尝试使用和不使用(推荐)完整包名称前缀的键值。 在Eclipse调试器中,我已经validation了正确插入到i.mExtras.mMap中的播放器名称的值。 这是来自初学者的代码: public class StatList extends ListActivity { private final StatsListAdapter statsAdapter; public StatList() { statsAdapter = StatsListAdapter.getInstance(this); } // default […]

意图服务启动后,防止更改应用程序演示Android的顺序

我有以下情况:一个主要应用程序是启动器应用程序(A) , 应用程序始终运行 ,此应用程序调用另一个子应用程序(B)图1。 当应用程序(A)启动intent service并且应用程序(B)使用此意图时(图2),会出现问题。 这是用于启动意向服务的代码: 服务 intentCodeRead.putExtra(BARCODE_TEXT, readStr); intentCodeRead.putExtra(BARCODE_DATE, System.currentTimeMillis()); intentCodeRead.setFlags(Intent.FLAG_RECEIVER_FOREGROUND); sendBroadcast(intentCodeRead); 有任何建议的标志来防止这种行为? 编辑1 在应用程序(A) (启动器应用程序)中,我有一个intentService ,它向另一个应用程序进行broadcast 。 应用程序(B)是收听此广播的应用程序。 当(A)进行广播时, 应用程序(B)然后收听。 问题是(A)在(A)做广播时带到(B)的前面。 如何在不更改应用程序演示顺序的情况下进行broadcast ? 编辑2 申请A. BarcodeScannerService.java intentCodeRead.putExtra(Constants.BARCODE_TEXT, readStr); intentCodeRead.putExtra(Constants.BARCODE_DATE, System.currentTimeMillis()); intentCodeRead.setFlags(Intent.FLAG_RECEIVER_FOREGROUND); sendBroadcast(intentCodeRead); initservice.java Intent intentService = new Intent(context, BarcodeScannerService.class); context.startService(intentService); 申请B. receive.java BroadcastReceiver actionBarcodeScannerAndPresenceReceiver = new BroadcastReceiver() { @Override public void onReceive(Context […]

如何从Intent调用活动时恢复活动

我有以下情况:单击一个按钮时,一个活动(DateActivity)调用另一个活动(ListActivity)。 那很有效。 但是,每次单击该按钮时,似乎都会创建一个新的ListActivity副本。 如何根据需要使其恢复最后一个ListActivity或创建新的ListActivity? 注意:我目前正在使用startActivity(intent);启动ListActivity startActivity(intent);

电子邮件意图忽略预设文本中的换行符(Android)

在各种Android应用程序中,我使用以下代码显示电子邮件的应用程序选择器,并在用户决定使用其中一个应用程序后,在电子邮件表单中插入预定义文本: final Intent emailIntent = new Intent(android.content.Intent.ACTION_SEND); emailIntent.setType(“plain/text”); emailIntent.putExtra(android.content.Intent.EXTRA_EMAIL, new String[] { “info@example.org” }); emailIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, “Sample subject”); String contentStr = “”; for (Object o : mArrayList) { // mArrayList: ArrayList content = contentStr+o.toString()+”\n”; } emailIntent.putExtra(android.content.Intent.EXTRA_TEXT, backupStr); startActivity(Intent.createChooser(emailIntent, “Choose application”)); 在for循环中,对象的字符串输出与临时字符串“contentStr”连接在一起。 在每个对象之后,应该有一个换行符(“\ n”)。 因此,当我在手机上测试此代码时,它工作正常,每个对象都有自己的行。 但是用户报告说他们的电子邮件应用程序(也是Android标准)将所有内容放在一行并忽略了换行符。 我做错了什么? 或者我可以忽略这个错误报告,因为它不是开发人员可以解决的问题吗?

Android:ACTION_BATTERY_LOW未在模拟器中触发。 Receiver在代码中注册,而不是清单

我看到过post,其中提到了必须调用registerReceiver (未在manifest中定义)来接收ACTION_BATTERY_LOW意图。 public class MainActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { //…. registerReceiver(new BatteryLevelReceiver(), new IntentFilter( Intent.ACTION_BATTERY_LOW)); } // ……. } 广播接收器 public class BatteryLevelReceiver extends BroadcastReceiver { private static final String TAG = BatteryLevelReceiver.class.getSimpleName(); @Override public void onReceive(Context context, Intent intent) { Log.d(TAG, “onReceive”); } } 我没有在logcat中看到“onReceive”日志语句。 我正在使用模拟器模拟电池电量低状态,使用telnet 5554并执行power capacity 10 […]

为什么在backstack中零碎片

我的简单布局只有一个片段占位符: 我首先在这个占位符中添加第一个片段 : fragmentTransaction.add(R.id.fragment_placeholder, firstFragment, “first”); //I did not put to backstack 我有一个第二个片段 ,它取代上面的片段并将其放回到堆栈 : FragmentManager fragMgr = getSupportFragmentManager(); FragmentTransaction fragTrans = fragMgr.beginTransaction(); //initialize an fragment instance Fragment secondFragment = initSecondFragment(); //replace with the fragment fragTrans.replace(R.id.fragment_placeholder, secondFragment, “second”); //Add transaction to back stack fragTrans.addToBackStack(null); //commit the transaction fragTrans.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE); fragTrans.commit(); //The following log returns me 0 […]

在前景方面杀死活动

我写了一个应用程序n一个问题。我有三个活动A,B和C.当我从活动A到B和B到C,如果我按下设备上的菜单按钮。我的应用程序进入后台状态。 当我重新打开应用程序时,它显示活动C.我想当我重新打开我的应用程序时它应该显示活动A而不是活动堆栈中的任何其他活动。 我已经完成了一些活动生命周期方法并试图覆盖它。我有覆盖onStart(),onPause()方法和finsh活动C以及活动B和我面临的问题是当我从活动C转到活动D活动时C完成所有后台活动nm无法在活动D结束时回到活动C.任何人都可以帮助我如何在应用程序的恢复上显示特定的活动? 提前解决。 这是我的manifest.xml

清除任务并开始新活动

我不知道为什么这么难以弄明白。 我有我的主要活动,在启动时,检查这是否是第一次打开。 如果是,则关闭主活动并使用FLAG_ACTIVITY_NEW_TASK打开设置/简介活动。 设置过程包括三个活动(A,B和C)。 在活动C结束时,如何清除它以及包含A,B和C的设置任务并再次启动主活动。 我尝试过添加FLAG_ACTIVITY_NEW_TASK | FLAG_ACTIVITY_CLEAR_TOP FLAG_ACTIVITY_NEW_TASK | FLAG_ACTIVITY_CLEAR_TOP到主要活动Intent但是当我按BACK时,它返回到设置过程的活动C. 当C完成并启动主要时,如何让它清除活动A,B和C的任务? 谢谢! 我正在构建Android 1.6(API 4),因此一些Activity标志可能会受到限制。

按权限,function和意图搜索Android应用程序

是否有服务通过指定应用程序的权限(例如android.permission.RECORD_AUDIO ),function(例如android.hardware.microphone ),启动或过滤的意图(例如android.speech.action.RECOGNIZE_SPEECH )来让用户搜索或浏览Android应用程序市场android.speech.action.RECOGNIZE_SPEECH )? 我有兴趣find可以在Android环境中补充我的应用程序的第三方应用程序,以便我可以向我的用户推荐这样的应用程序,理想情况是以编程方式。 我到目前为止使用的是Google代码搜索查询,例如http://www.google.com/codesearch?q=RECOGNIZE_SPEECH ,但这些只包含开源应用。 有没有更好的办法? 更新 :请注意,Google代码搜索已被关闭。 伤心。 这是一项非常有用的服务。