Линкфай для Android

Я пытаюсь создать страницу активности Android, SecondaryActivity, которая предоставляет ссылку на веб-страницу, которая открывает веб-браузер с указанной ссылкой. Я запускаю страницу «Активность» со страницы «Основная активность» следующим образом:

Intent  intent = new Intent(this, SecondaryActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
MainActivity.this.startActivity(intent);

У меня есть следующий код в моей SecondaryActivity, но он дает ошибку ниже:

Код

 protected void onPostExecute(Map<String,Float> sampleData) {
             TableLayout table = (TableLayout) findViewById(R.id.mainTable);
             if(sampleData == null) { 
                 // If no information is found for the user, add the message to the view letting them know where
                 // to go to set up their appliances...

                 TextView tvDynamicKey = new TextView(getApplicationContext());                     
                 tvDynamicKey.setText("No appliances have been found, please help us by \nlogging onto our website. Click here.");
                 Pattern pattern = Pattern.compile("here");
                 String scheme = "http://www.google.com/";
                 Linkify.addLinks(tvDynamicKey, pattern, scheme);

                 tvDynamicKey.setLayoutParams(new TableRow.LayoutParams(1));

                 TableRow tr = new TableRow(getApplicationContext());

                 tr.setId(101);
                 tr.addView(tvDynamicKey);
                 table.addView(tr);

                 TextView tvDynamicKey2 = new TextView(getApplicationContext());
                 tvDynamicKey2.setText("Contact me at [email protected] \nfor details!");
                 pattern = Pattern.compile("[email protected]");
                 scheme = "[email protected]";
                 Linkify.addLinks(tvDynamicKey2, pattern, scheme);

                 // TODO When I click  the link here, I get an error:

                 tr = new TableRow(getApplicationContext());
                 tr.setId(102);
                 tr.addView(tvDynamicKey2);
                 table.addView(tr);
             } 
    }

Ошибка

01-21 23:31:52.715: ERROR/AndroidRuntime(838): FATAL EXCEPTION: main
01-21 23:31:52.715: ERROR/AndroidRuntime(838): android.util.AndroidRuntimeException: Calling startActivity() from outside of an Activity  context requires the FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want?
01-21 23:31:52.715: ERROR/AndroidRuntime(838):     at android.app.ContextImpl.startActivity(ContextImpl.java:617)
01-21 23:31:52.715: ERROR/AndroidRuntime(838):     at android.content.ContextWrapper.startActivity(ContextWrapper.java:258)
01-21 23:31:52.715: ERROR/AndroidRuntime(838):     at android.text.style.URLSpan.onClick(URLSpan.java:62)
01-21 23:31:52.715: ERROR/AndroidRuntime(838):     at android.text.method.LinkMovementMethod.onTouchEvent(LinkMovementMethod.java:216)
01-21 23:31:52.715: ERROR/AndroidRuntime(838):     at android.widget.TextView.onTouchEvent(TextView.java:6577)
01-21 23:31:52.715: ERROR/AndroidRuntime(838):     at android.view.View.dispatchTouchEvent(View.java:3766)
01-21 23:31:52.715: ERROR/AndroidRuntime(838):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:936)
01-21 23:31:52.715: ERROR/AndroidRuntime(838):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:936)
01-21 23:31:52.715: ERROR/AndroidRuntime(838):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:936)
01-21 23:31:52.715: ERROR/AndroidRuntime(838):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:936)
01-21 23:31:52.715: ERROR/AndroidRuntime(838):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:936)
01-21 23:31:52.715: ERROR/AndroidRuntime(838):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:936)
01-21 23:31:52.715: ERROR/AndroidRuntime(838):     at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1671)
01-21 23:31:52.715: ERROR/AndroidRuntime(838):     at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1107)
01-21 23:31:52.715: ERROR/AndroidRuntime(838):     at android.app.Activity.dispatchTouchEvent(Activity.java:2086)
01-21 23:31:52.715: ERROR/AndroidRuntime(838):     at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1655)
01-21 23:31:52.715: ERROR/AndroidRuntime(838):     at android.view.ViewRoot.handleMessage(ViewRoot.java:1785)
01-21 23:31:52.715: ERROR/AndroidRuntime(838):     at android.os.Handler.dispatchMessage(Handler.java:99)
01-21 23:31:52.715: ERROR/AndroidRuntime(838):     at android.os.Looper.loop(Looper.java:123)
01-21 23:31:52.715: ERROR/AndroidRuntime(838):     at android.app.ActivityThread.main(ActivityThread.java:4627)
01-21 23:31:52.715: ERROR/AndroidRuntime(838):     at java.lang.reflect.Method.invokeNative(Native Method)
01-21 23:31:52.715: ERROR/AndroidRuntime(838):     at java.lang.reflect.Method.invoke(Method.java:521)
01-21 23:31:52.715: ERROR/AndroidRuntime(838):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
01-21 23:31:52.715: ERROR/AndroidRuntime(838):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
01-21 23:31:52.715: ERROR/AndroidRuntime(838):     at dalvik.system.NativeStart.main(Native Method)

person user836200    schedule 22.01.2012    source источник


Ответы (2)


Linkify не будет работать, если вы пытаетесь использовать симулятор, если он отображает адрес, но в остальном он работает нормально. Здесь в вашем коде вы пытаетесь открыть браузер, предоставляя ссылку, и в этом нет никакой проблемы, это прекрасно. Когда я увидел ваши журналы ошибок, я могу сказать вам, что это не проблема с вашей ссылкой. Вы пытаетесь вызвать свою активность вне контекста. В этом случае при запуске активности запустите ее с флагом FLAG_ACTIVITY_NEW_TASK. Надеюсь, это решит вашу проблему

person Arun    schedule 22.01.2012
comment
Привет, спасибо за ваш ответ. Я все еще получаю ту же ошибку (01-22 01:05:52.926: ERROR/AndroidRuntime(1428): android.util.AndroidRuntimeException: для вызова startActivity() из-за пределов контекста действия требуется флаг FLAG_ACTIVITY_NEW_TASK. Это действительно то, что вы хотите), но теперь я начинаю активность следующим образом: Intentintent = new Intent(getApplicationContext(), ApplianceActivity.class); намерение.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(намерение); - person user836200; 22.01.2012
comment
попробуйте начать активность следующим образом yourclassname.this.startActivity(intent); - person Arun; 22.01.2012
comment
Я получаю сообщение об ошибке. Нет вложенного экземпляра типа ApplianceActivity, доступного в области видимости. - person user836200; 22.01.2012
comment
Я неправильно понял ваше предложение; Я попытался запустить действие таким образом, и я все еще получаю ту же ошибку. - person user836200; 22.01.2012

Я не смог заставить этот метод работать, поэтому я использовал следующий метод на веб-сайте: -веб-страница-в-андроиде/" rel="nofollow">http://mgmblog.com/2009/01/06/четыре разных-способа-открытия-веб-страницы-в-андроиде/ :

<TableRow>
        <TextView
                android:id="@+id/link1_lbl"
                android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                android:text=""
                android:textSize="16sp"
                android:paddingRight="5dip"/>
            <!--
                Using autoLink='web' to show the text as a web link
             -->
            <TextView
                android:id="@+id/link1_view"
                android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                android:autoLink="web"
                android:text=""/>
        </TableRow>

Я программно установил атрибуты link1_lbl и link1_view

person user836200    schedule 23.01.2012