简单的分析了一下源代码,在
- final Intent pickWallpaper = new Intent(Intent.ACTION_SET_WALLPAPER);
- Intent chooser = Intent.createChooser(pickWallpaper,
- getText(R.string.chooser_wallpaper));
处百思不得其解,后来在网上找,也没有很透彻的解释。先看下它的官方文档吧:
- public static Intent createChooser (Intent target, CharSequence title)
- Since: API Level 1
-
- Convenience function for creating a ACTION_CHOOSER Intent.
- Parameters
- target The Intent that the user will be selecting an activity to perform.
- title Optional title that will be displayed in the chooser.
- Returns
-
- * Return a new Intent object that you can hand to Context.startActivity() and related methods.
在google上面也找了下,慢慢的有些明白,在一篇文章中看到这么一段话:
这里是要找到所有能处理Intent.ACTION_SET_WALLPAPER请求的activity,其字符串表示为android.intent.action.SET_WALLPAPER。使用Eclipse搜索之后,在以下应用的AndroidManifest.xml文件都找到了能处理这个请求的activity:
packages/apps/Gallery
packages/apps/Launcher2
packages/wallpapers/LivePicker
再看看下面的这个图:
壁纸对应的是Launcher2里面的WallpaperChooser.activity。动态壁纸对应的是packages/wallpapers/LivePicker的LiveWallpaperListActivity,他们的共同点 就是在AndroidManifest.xml都有
- <intent-filter>
- <action android:name="android.intent.action.SET_WALLPAPER" />
- <category android:name="android.intent.category.DEFAULT" />
- </intent-filter>
如下定义,或许你有了些许明白,看下 http://groups.google.com/group/android-developers/browse_thread/thread/9d376a94066057a4
这里面的解释,我英语不是太好,按照我自己的理解就是,你如果像下面这样
- Intent pickWallpaper = new Intent(Intent.ACTION_SET_WALLPAPER);
- Intent chooser = Intent.createChooser(pickWallpaper,
建立一个intent chooser,系统会寻找所有activity,然后把有
- <intent-filter>
- <action android:name="android.intent.action.SET_WALLPAPER" />
- <category android:name="android.intent.category.DEFAULT" />
- </intent-filter>
定义的activity形成列表提供给使用者。为了验证我的想法,个人写了一个很简单的小例子,MainActivity代码如下:
- public class MainActivity extends Activity {
-
- private Button button;
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
-
- button=(Button)findViewById(R.id.wallpaperButton);
- button.setOnClickListener(new View.OnClickListener() {
-
- @Override
- public void onClick(View v) {
-
- final Intent pickWallpaper = new Intent(Intent.ACTION_SET_WALLPAPER);
- Intent chooser = Intent.createChooser(pickWallpaper,"tese the ACTION_SET_WALLPAPER");
- startActivity(chooser);
- }
- });
- }
- }
还有一个demo,代码如下
- public class Demo extends Activity {
-
-
- @Override
- protected void onCreate(Bundle savedInstanceState) {
-
- super.onCreate(savedInstanceState);
- setContentView(R.layout.demo);
- }
- }
demo.xml文件里面只有一个textview很简单。
然后是AndroidManifest.xml文件:
- <?xml version="1.0" encoding="utf-8"?>
- <manifest xmlns:android="http://schemas.android.com/apk/res/android"
- package="cn.demo"
- android:versionCode="1"
- android:versionName="1.0">
-
-
-
-
- <application android:icon="@drawable/icon" android:label="@string/app_name">
- <activity android:name=".MainActivity"
- android:label="@string/app_name">
- <intent-filter>
- <action android:name="android.intent.action.MAIN" />
- <category android:name="android.intent.category.LAUNCHER" />
- </intent-filter>
- </activity>
- <activity android:name=".Demo">
- <action android:name="android.intent.action.SET_WALLPAPER" />
- <category android:name="android.intent.category.DEFAULT" />
- </intent-filter>
- </activity>
- </application>
- /manifest>
注意:
- </activity>
- <activity android:name=".Demo">
- <intent-filter>
- <action android:name="android.intent.action.SET_WALLPAPER" />
- <category android:name="android.intent.category.DEFAULT" />
- </intent-filter>
- </activity>
我在这里面加了intent适配器
<action android:name="android.intent.action.SET_WALLPAPER" />
运行下程序,点击button按钮,效果如下:
下面是关于一段选择系统已安装的第三方应用分享的片段:
private void CreateShare(String title) {
Intent intent = new Intent(Intent.ACTION_SEND); // 启动分享发送的属性
intent.setType("text/plain"); // 分享发送的数据类型
intent.putExtra(Intent.EXTRA_TEXT, title); // 分享的内容
startActivity(Intent.createChooser(intent,
getResources().getString(R.string.choose_to_share)));// 目标应用选择对话框的标题
}
搞定了原来腾讯和开心的微薄
send的activity 的配置为
<activity android:name=".activity.MicroBlogInput" android:screenOrientation="portrait" android:configChanges="keyboardHidden|orientation" android:windowSoftInputMode="stateAlwaysVisible|adjustResize">
<intent-filter android:label="@string/albums_sendbyWBlog">
<action android:name="android.intent.action.SEND" />
<data android:mimeType="image/*" /> <category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
它并没有定义date mimetype=("text/plain");
所以intent.setType("text/plain");
这个条件就把它过滤掉了
所以你的代码要把intent.setType("text/plain");
这句改为
intent.setType("imge/*");
我测试通过了 不管是模拟器还是实体机
也许这个不是最好的办法 但是是解决问题的办法
解决方法:
public void onClickShare(View view) {
Intent intent=new Intent(Intent.ACTION_SEND);
intent.setType("image/*");
intent.putExtra(Intent.EXTRA_SUBJECT, "分享");
intent.putExtra(Intent.EXTRA_TEXT, "终于可以了!!!");
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(Intent.createChooser(intent, getTitle()));
}