Android,如何判断用户是否点击了linkify链接,或者按下主页按钮

时间:2013-01-11 03:17:50

标签: android android-lifecycle linkify activity-finish home-button

我想我需要在onStop方法中添加一些代码。它适用于仅在活动为finished()

时才应运行的服务

但是当用户将一些linkify d文字关注到网络浏览器时,或者当用户按下主屏幕时,都会调用onStop(),但这些都不会结束活动,我不喜欢我想在用户关注链接时结束活动,因此我无法将finish()放在onStop()中,除非我能在onStop()内检测并区分这种情况

有没有办法可以覆盖Linkify()以便我可以在其中添加一个标记,或者让它运行startActivityforResult()以便我可以在结果中返回信息?

类似地,当用户按下主页按钮时,有没有办法可以将活动设置为finish()

由于

2 个答案:

答案 0 :(得分:1)

您是否可以检查onStop()中的isFinishing(),以决定是否需要运行与服务相关的代码?

@Override
protected void onStop() {
    super.onStop();

    if (isFinishing()) {
        // Your service-related code here that should only run if finish() 
        // was called.
    }
}

更新:(在更好地理解问题后)

another question上建议的方法非常相似,您可以覆盖startActivity()以在链接启动时拦截,并设置您的标记(如果是这种情况)。

@Override
public void startActivity(Intent intent) {
    final String action = intent.getAction();
    if (action.equals(Intent.ACTION_VIEW)) { 
        // maybe also check if getScheme() is 'http' then set our flag
        persist.saveToPrefs("linkifyClick", true);
    }

    // proceed with normal handling by the framework
    super.startActivity(intent);
}

如果您愿意,其他答案也会显示如何调用startActivityForResult()

答案 1 :(得分:0)

解决方案(仍然存在问题)

我在xml

中的textView上添加了onClick:属性
<TextView
        android:id="@+id/body"
        android:paddingTop="10dp"
        android:onClick="onTextViewClick"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="" />

然后在该新方法中的共享偏好中保存了一个标记

public void onTextViewClick(View v){

    //write to sharedpreferences
    persist.saveToPrefs("linkifyClick", true);
}

然后在我的onStop中,我可以检测是否设置了该标志!

 @Override
public void onStop(){
    super.onStop();



    if(persist.getFromPrefs("linkifyClick", false) == false)
    {
        finish();
    }
    else
        persist.saveToPrefs("linkifyClick", false); //if it was true, then set to false
}

问题

可以在不触及实际链接部分的情况下单击链接的文本。这会将标志设置为true,并且仍会混淆我的生命周期。所以我需要能够检测何时按下主页按钮

更新:这有助于澄清另一张海报的问题(接受了答案),该人更新了答案,我把它放入我的代码后就接受了。它有效。