可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
The task of this application is to implicitly activate a separate application to view the URL, “http:// www.google.com”. So, App Chooser should appear and let me choose between at least two browsers: the default one, which will show me the www.google.com site, and another simple "browser", which just shows me the url. The problem is - App chooser doesn't appear, when i use implicit activity. Probably I wrote wrong intent filters for second "simple browser".
private void startImplicitActivation() { Log.i(TAG, "Entered startImplicitActivation()"); // TODO - Create a base intent for viewing a URL // (HINT: second parameter uses parse() from the Uri class) Uri adress = Uri.parse(URL); Intent intentUrlView = new Intent(Intent.ACTION_VIEW, adress); // TODO - Create a chooser intent, for choosing which Activity // will carry out the baseIntent. Store the Intent in the // chooserIntent variable below. HINT: using the Intent class' // createChooser()) Intent chooserIntent = Intent.createChooser(intentUrlView, CHOOSER_TEXT); //chooserIntent = null; Log.i(TAG,"Chooser Intent Action:" + chooserIntent.getAction()); // TODO - Start the chooser Activity, using the chooser intent if (intentUrlView.resolveActivity(getPackageManager()) != null) { startActivity(chooserIntent); } }
MANIFEST
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="course.labs.intentslab.mybrowser" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="13" android:targetSdkVersion="18" /> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name=".MyBrowserActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> <!-- TODO - Add necessary intent filter information so that this Activity will accept Intents with the action "android.intent.action.VIEW" and with an "http" schemed URL --> <action android:name="android.intent.action.VIEW" /> <data android:scheme="http" /> <category android:name="android.intent.category.BROWSABLE" /> </activity> </application>
回答1:
Seriously, you have a GUI editor for manifest.
This
<action android:name="android.intent.action.VIEW" /> <data android:scheme="http" /> <category android:name="android.intent.category.BROWSABLE" />
should placed in <intent-filter> tag, as you already can see in your manifest. Like this:
<activity android:name=".MyBrowserActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> <!-- TODO - Add necessary intent filter information so that this Activity will accept Intents with the action "android.intent.action.VIEW" and with an "http" schemed URL --> <intent-filter> <action android:name="android.intent.action.VIEW" /> <data android:scheme="http" /> <category android:name="android.intent.category.BROWSABLE" /> </intent-filter> </activity>
That is how it done in default browser:
<intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:scheme="http" /> <data android:scheme="https" /> <data android:scheme="about" /> <data android:scheme="javascript" /> </intent-filter> <intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.BROWSABLE" /> <category android:name="android.intent.category.DEFAULT" /> <data android:scheme="http" /> <data android:scheme="https" /> <data android:scheme="inline" /> <data android:scheme="file" /> <data android:mimeType="text/html" /> <data android:mimeType="text/plain" /> <data android:mimeType="application/xhtml+xml" /> <data android:mimeType="application/vnd.wap.xhtml+xml" /> </intent-filter>
回答2:
Seems like the Adam Porter's Third Week Assignment of Programming mobile Application for Android HandHeld systems. Anyway, I hope you have your solution inside the AndroidManifest.xml you would need to add three more intent filters.
<action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <data android:scheme="http" />
Further, if you were not able to run the AndroidUnit tests,
make sure you have done something similar to this in the ActionListener of the implicit button call.
Intent baseIntent = new Intent(Intent.ACTION_VIEW); baseIntent.setData(Uri.parse(URL)); Intent chooserIntent = Intent.createChooser(baseIntent, "Select Application");
Coursera already has a mailing list. Please use that.
回答3:
Easy implementation of multiple actions app chooser:
Intent phoneCall=new Intent(Intent.ACTION_DIAL,Uri.fromParts("tel",contactNumber,null)); //Intent sms=new Intent(Intent.ACTION_VIEW,Uri.parse("sms:"+contactNumber)); Intent whatsapp=new Intent(Intent.ACTION_SENDTO, Uri.parse("smsto:"+contactNumber)); Uri.Builder builder = CalendarContract.CONTENT_URI.buildUpon(); builder.appendPath("time"); ContentUris.appendId(builder, Calendar.getInstance().getTimeInMillis()); Intent calendarIntent = new Intent(Intent.ACTION_VIEW).setData(builder.build()); Intent chooser=Intent.createChooser(whatsapp,"chooser??");//default action chooser.putExtra(Intent.EXTRA_INITIAL_INTENTS,new Intent[]{phoneCall,calendarIntent});//additional actions startActivity(chooser);
回答4:
Here's how I am doing:
Step 1: First in the strings,
<string name="webklink"><a href="http://www.google.com">SomeLink</a></string>
Step 2: My Layout:
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" android:orientation="vertical" > <TextView android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:text="@string/webklink" android:textAppearance="?android:attr/textAppearanceLarge" /> </RelativeLayout>
Step 3: Getting the link from the strings.
public class OpenWeb extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.webopen); TextView someLink = (TextView)findViewById(R.id.textView1); if(someLink!=null){ someLink.setMovementMethod(LinkMovementMethod.getInstance()); someLink.setText(Html.fromHtml(getResources().getString(R.string.webklink))); } } }
Hope this helps..:)
回答5:
You have to run lab3a_MyBrowser before you run lab3a_IntentsLab, so that the browser gets installed on your phone. Then it will be visible to your chooser.