启动其他应用的几种方式:
一、直接使用startActivity
1.通过PackageName、ActivityName启动
需要明确被启动应用的PackageName、ActivityName。通常可能不清楚。
需要通过一定的方式获取:
public void getPackageName () {
// 获得包管理器
PackageManager pm = getPackageManager();
// 根据Activity的意图来获取相关的信息
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCatategory(Intent.CATEGORY_LAUNCHER);
List<ResolveInfo> resolveList = pm.queryIntentActivities(intent, 0);
for (ResolveInfo resolveInfo : resolveList) {
// 获得包名、启动Activity名
String pn = resolveInfo.activityInfo.packageName;
String an = resolveInfo.activityInfo.name;
}
}
知道了要启动应用的包名和Activity名,可以通过如下的方式启动应用。
public void startOtherAppActivity(String packageName, String activityName) {
Intent intent = new Intent();
intent.setAction(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
ComponentName cn = new ComponentName(packageName, activityName);
intent.setComponent(cn);
startActivity(intent);
}
二、使用接收广播的方式启动Activity
1.在发送广播的这一端:
public class MainActivity extends Activity {
private static final String TAG = "MainActivity";
private static final String ACTION = "com.jzmedia.iedu.test.ACTION_START_ACTIVITY";
private static final String KEY = "TEST";
private static final String DATA = "这是一条测试数据!";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
// 在一个Button上设置了onClick属性,也可以使用setOnClickListener方法
public void onClick (View v) {
Intent intent = new Intent();
intent.setAction(ACTION);
intent.putExtra(KEY, DATA);
Log.d(TAG, "发送了启动应用的广播!");
sendBroadcast(intent);
}
}
2.在接收广播的这一端
在清单配置文件中:
AndroidManifest.xml
<application
...>
<!--在清单配置文件中静态注册广播接收器-->
<receiver android:name=".BootReceiver">
<intent-filter>
<action android:name="com.jzmedia.iedu.test.ACTION_START_ACTIVITY" />
</intent-filter>
</receiver>
</application>
在BootReceiver.java中
public class BootReceiver extends BroadcastReceiver {
private static final String ACTION = "com.jzmedia.iedu.test.ACTION_START_ACTIVITY";
private static final String KEY = "TEST";
private static final String TAG = "BootReceiver";
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (ACTION.equals(action)) {
String test = intent.getStringExtra(KEY);
Intent startIntent = new Intent();
startIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startIntent.setClass(context, HomeActivity.class);
Log.d(TAG, "收到了广播");
startIntent.putExtra(KEY, test);
context.startActivity(startIntent);
}
}
}
于是可以收到广播,启动应用,获得广播中的数据。