7

有没有办法让 Android 活动检测它是如何启动的?具体来说,我想检测我的应用程序是否从 Eclipse 启动,而不是它是否正常启动(例如,从主屏幕或已安装的应用程序列表)。

这是了解是否应上传崩溃报告的代理。我假设如果 Eclipse 启动了应用程序,那么我不需要上传崩溃,因为我已经在调试应用程序,但是如果应用程序的相同版本“正常”启动,我想上传任何例外。

这只是为了让我的个人调试和开发更容易,所以无法交付的 Eclipse 黑客或调整对我很有用。

4

3 回答 3

2

方法似乎可以满足您的要求:

if(!android.os.Debug.isDebuggerConnected()) {
    // Send report...
}

这应该告诉您当前是否已连接到调试器。如果从应用程序抽屉或主屏幕快捷方式启动,您将不会被附加(除非您已经附加了一个正在运行的实例并且此方法将返回 false - 在这种情况下,您可以上传您的崩溃信息。

于 2013-07-10T01:08:32.833 回答
1

您(我?)可以向应用程序添加一个新活动,并让 Eclipse 启动它。新活动将设置一个标志,否则不会设置,否则是相同的。该应用程序的常规使用将通过默认活动来实现,因此该标志将默认为未设置。

添加一个DebugActivity扩展现有活动的新活动(调用它MainActivity):

public class DebugActivity extends MainActivity {
    public DebugActivity() {
        super(true); // running from Eclipse
    }
}

添加一个新的布尔构造函数和无参数构造函数MainActivity来支持新的子类:

private final boolean viaEclipse;

public MainActivity() {
    this(false);
}

public MainActivity(boolean viaEclipse) {
    this.viaEclipse = viaEclipse;
}

复制<activity>应用清单中的信息.MainActivity,但更改副本以引用新的.DebugActivity. 从 中删除<category>标签(“LAUNCHER”),.DebugActivity <intent-filter>以防止它出现在 Android UI 中。

在 Eclipse 中,选择Run -> Run Configurations .... 选择应用程序的现有运行配置。单击“复制当前选择的启动配置”图标,然后在Android副本中的选项卡上将Launch Action“启动默认活动”更改为“启动:”并选择新的.DebugActivity.

缺点

  1. Eclipse“调试”运行与“真实”运行不同,但差异非常小(基本上只是启动类名称和堆栈上的额外条目)。至少在 Java 端没有重复的代码。

  2. <activity>在清单中复制了我的大部分内容,这有点脆弱但还不错。

拥有比这更简单的东西仍然会很好。

于 2013-07-10T04:05:50.760 回答
1

您可以使用 if (BuildConfig.DEBUG) 从发布版本中区分调试版本。

于 2013-07-10T01:15:03.107 回答