Android 使用Component跨应用程序访问
2015-09-04 09:19
537 查看
Android Component跨应用程序访问,就是打开其他应用程序的activity。里面有两个项目,安装包。因为测试一个应用程序打开另外一个应用程序,所以测试需要同时安装这两个。在打开其他应用程序的activity还可携带数据,和返回数据。下载地址:点击
主要看下面代码,有注释说明。那么先看demo的效果图:
一、实现效果
二、看主要代码
如果打开时其他应用程序的主activity,就不用写AndroidManifest。其他activity需要去写一下,写了配置也有两种打开方式。看上面测试代码就知道了。看看配置。
三、随便看看其他activity接受数据,以及返回数据方法。
四、补充这篇博客Android 使用开源库加载网络图片一点内容,测试打开activity代码也是从这篇demo中修改得来的。现在补充关于开源库加载网络图片一个封装的调用类。
本文demo下载地址:点击
欢迎大家一起交流学习!
主要看下面代码,有注释说明。那么先看demo的效果图:
一、实现效果
二、看主要代码
package com.example.activity; import java.util.List; import android.os.Bundle; import android.app.Activity; import android.app.ActivityManager; import android.content.ComponentName; import android.content.Intent; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.TextView; import android.widget.Toast; /** * 测试跨应用程序访问activity,并携带数据并返回数据 * @author Administrator * */ public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); } //初始化UI private void initView() { Button mainButton = (Button)findViewById(R.id.button1); Button secondButton = (Button)findViewById(R.id.button2); mainButton.setOnClickListener(new ButtonOnclick()); secondButton.setOnClickListener(new ButtonOnclick()); } /** * button按键监听类 * @author Administrator * */ private class ButtonOnclick implements OnClickListener{ @Override public void onClick(View v) { int id = v.getId(); switch (id) { case R.id.button1: // 访问主界面 ComponentName componetName = new ComponentName( "com.main.listviewsideslip", //包 "com.main.listviewsideslip.MainActivity"); //类 try { Intent intent = new Intent(); intent.setComponent(componetName); startActivity(intent); } catch (Exception e) { Toast.makeText(getApplicationContext(), getResources().getString(R.string.NoFindApp), Toast.LENGTH_SHORT).show(); } break; case R.id.button2: //访问第二个activity页面 // getRecommendOpen(); getTestSearch(); break; default: break; } } /** * 直接使用Intent.ACTION_WEB_SEARCH搜索关键字查找B应用程序的activity, * 需要在B应用程序AndroidManifest需要打开activity加上 * <intent-filter> * <action android:name="com.test"/> * <category android:name="android.intent.category.DEFAULT"/> * </intent-filter> */ private void getTestSearch() { try { ComponentName componetName = new ComponentName( "com.main.listviewsideslip", "com.main.listviewsideslip.ListViewItemShowActivity"); // 也可以用这个作为搜索关键 Intent intent = new Intent(Intent.ACTION_WEB_SEARCH); intent.setComponent(componetName); Bundle bundle = new Bundle(); bundle.putInt("HeadImg", 2); bundle.putInt("NewNum", 99); bundle.putString("Name", "成功"); intent.putExtras(bundle); startActivityForResult(intent, 20); } catch (Exception e) { Toast.makeText(getApplicationContext(), getResources().getString(R.string.NoFindApp), Toast.LENGTH_SHORT).show(); } } /** * 使用这种方式打开B应用程序activity,不用使用搜索,直接加上名称 * 需要在B应用程序AndroidManifest需要打开activity加上 * <intent-filter> * <action android:name="com.test"/> * <category android:name="android.intent.category.DEFAULT"/> * </intent-filter> */ private void getRecommendOpen() { try { Intent intent = new Intent("com.test"); // 使用bundle携带数据 Bundle bundle = new Bundle(); bundle.putInt("HeadImg", 2); bundle.putInt("NewNum", 99); bundle.putString("Name", "成功"); intent.putExtras(bundle); startActivityForResult(intent, 20); } catch (Exception e) { Toast.makeText(getApplicationContext(), getResources().getString(R.string.NoFindApp), Toast.LENGTH_SHORT).show(); } } /** * 这个函数时查找系统启动各个应用程序,都能查找出来相应的包 * 可以用来查看当前启动应用程序的情况 */ private void getFindRunningAppProcess() { ActivityManager activityManager = (ActivityManager) getSystemService(ACTIVITY_SERVICE); List<ActivityManager.RunningAppProcessInfo> list = activityManager .getRunningAppProcesses(); if (list != null) { for (int i = 0; i < list.size(); ++i) { if ("com.main.listviewsideslip" .matches(list.get(i).processName)) { } } } } } /** * 接受返回activity的数据 */ @Override protected void onActivityResult(int requestCode, int resultCode, Intent dataReceive) { if (dataReceive == null) { return; } if (requestCode == 20) { Bundle bundle = dataReceive.getExtras(); String strResultString = bundle.getString("backData"); TextView showTextView = (TextView)findViewById(R.id.textView1); showTextView.append("from ListviewSideslip 应用程序返回的data:" + "\n"); showTextView.append(strResultString); } } }
如果打开时其他应用程序的主activity,就不用写AndroidManifest。其他activity需要去写一下,写了配置也有两种打开方式。看上面测试代码就知道了。看看配置。
三、随便看看其他activity接受数据,以及返回数据方法。
package com.main.listviewsideslip; import com.listview.adapter.ImageLoadManage; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.widget.ImageView; import android.widget.TextView; public class ListViewItemShowActivity extends Activity{ @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.recent_listview_item); initView(); } private void initView() { ImageLoadManage imageLoadManage = new ImageLoadManage(); Bundle bundle = this.getIntent().getExtras(); if (bundle == null) { return; } TextView name = (TextView) findViewById(R.id.recent_list_item_name); TextView num = (TextView) findViewById(R.id.unreadmsg); ImageView head = (ImageView) findViewById(R.id.icon); imageLoadManage.getImageView(bundle.getInt("HeadImg"), head); name.setText(bundle.getString(("Name"))); num.setText(String.valueOf(bundle.getInt("NewNum"))); } @Override public void finish() { Intent intent = new Intent(); Bundle bundle = new Bundle(); bundle.putString("backData", "来自listviewsideslip应用程序的数据"); intent.putExtras(bundle); setResult(RESULT_OK,intent); super.finish(); } }
四、补充这篇博客Android 使用开源库加载网络图片一点内容,测试打开activity代码也是从这篇demo中修改得来的。现在补充关于开源库加载网络图片一个封装的调用类。
package com.listview.adapter; import android.widget.ImageView; import com.main.listviewsideslip.Constants; import com.main.listviewsideslip.R; import com.nostra13.universalimageloader.core.DisplayImageOptions; import com.nostra13.universalimageloader.core.ImageLoader; import com.nostra13.universalimageloader.core.display.RoundedBitmapDisplayer; /** * 开源库universal-image-loader-1.9.4-with-sources.jar图片加载管理类 * @author Administrator * */ public class ImageLoadManage { private DisplayImageOptions mOptions; // 设置图片显示相关参数 public static String[] mImageUrls; // 图片路径 private ImageLoader mImageLoader; //网络图片加载类 public ImageLoadManage(){ mImageLoader = ImageLoader.getInstance(); initImageView(); } public void initImageView() { mImageUrls = Constants.images; // 使用DisplayImageOptions.Builder()创建DisplayImageOptions mOptions = new DisplayImageOptions.Builder() .showImageOnLoading(R.drawable.ic_stub) // 设置图片下载期间显示的图片 .showImageForEmptyUri(R.drawable.ic_empty) // 设置图片Uri为空或是错误的时候显示的图片 .showImageOnFail(R.drawable.ic_error) // 设置图片加载或解码过程中发生错误显示的图片 .cacheInMemory(true) // 设置下载的图片是否缓存在内存中 .cacheOnDisk(true) // 设置下载的图片是否缓存在SD卡中 .displayer(new RoundedBitmapDisplayer(20)) // 设置成圆角图片 .build(); // 构建完成 } /** * 外部需要加载图片,直接使用这个函数即可 * @param position * @param Image */ public void getImageView(int position ,ImageView Image){ /** * imageUrl 图片的Url地址 imageView 承载图片的ImageView控件 options * DisplayImageOptions配置文件 */ mImageLoader.displayImage(mImageUrls[position], Image, mOptions); } }直接使用这个方法getImageView(int position ,ImageView Image)就可以加载图片。这样使用起来就很简洁。
本文demo下载地址:点击
欢迎大家一起交流学习!
相关文章推荐
- AVD启动不了 ANDROID_SDK_HOME is defined but could not find *.ini
- Android test---robotium----简单例子
- Android应用的定时通知实现
- Android 录音PCM 转G711U,非常简单,非FFMPEG
- Android:Layout_weight的深刻理解
- Android:Layout_weight的深刻理解
- Android ListView中使用CheckBox等的混乱问题
- Android dagger2使用
- Android怎么获取ListView的值
- android animation
- Android添加半透明操作提示的方法
- Android学习之自定义view——TopBar
- Android抽象布局——include、merge 、ViewStub
- Android test---JUnit
- android-------采用AIDL调用远程服务
- Android多线程断点下载
- android 图片加载优化,避免oom问题产生
- 【Android基础】Fragment 详解之Fragment生命周期
- 【Android基础】Fragment 详解之Fragment生命周期
- Android实例-解决启动黑屏问题(XE8+小米2)