Android访问系统或者其他程序

来源:互联网 发布:淘宝客昵称怎么修改 编辑:程序博客网 时间:2024/06/05 17:12

Android 开发有时需要在一个应用中启动另一个应用。
如:调用插件,访问系统默认应用。

访问非系统程序

访问的Activity必须配置该exported属性为true,即允许其他程序启动该Activity。

android:exported=”true”

示例:

    <activity            android:name=".MainActivity"            android:exported="true">//允许其他程序启动该Activity            <intent-filter>                <action android:name="android.intent.action.MAIN" />                <category android:name="android.intent.category.LAUNCHER" />            </intent-filter>        </activity>

通过包名访问程序主Activity

如果知道我们程序的包名,则可以用如下代码来启动:

    Intent intent = getPackageManager().getLaunchIntentForPackage("com.activitylifecycledemo");//包名        if (intent == null) {            Toast.makeText(this, "程序不存在!", Toast.LENGTH_LONG).show();        } else {            intent.addCategory(Intent.CATEGORY_LAUNCHER);//可省略            intent.setAction(Intent.ACTION_MAIN);//可省略            startActivity(intent);        }

或者:

PackageInfo pi = null;        try {            pi = getPackageManager().getPackageInfo("com.activitylifecycledemo", 0);        } catch (PackageManager.NameNotFoundException e) {            e.printStackTrace();        }        Intent resolveIntent = new Intent(Intent.ACTION_MAIN, null);        resolveIntent.addCategory(Intent.CATEGORY_LAUNCHER);        resolveIntent.setPackage(pi.packageName);        PackageManager pm = getPackageManager();        List<ResolveInfo> apps = pm.queryIntentActivities(resolveIntent, 0);        ResolveInfo ri = apps.iterator().next();        if (ri != null) {            String packageName = ri.activityInfo.packageName;            String className = ri.activityInfo.name;//获取主Activity名            Intent intent = new Intent();            intent.addCategory(Intent.CATEGORY_LAUNCHER);//可省略            intent.setAction(Intent.ACTION_MAIN);//可省略            ComponentName cn = new ComponentName(packageName, className);            intent.setComponent(cn);            startActivity(intent);        }
  1. 调用这两个方法程序会通过包名自动访问入口的Activity。
  2. 第二个方法可以获取主Activity名。

通过包名访问程序非主Activity

如果我们知道程序的包名和要访问的Activity名,则可以用如下代码来启动:

Intent intent = new Intent();         intent.addCategory(Intent.CATEGORY_LAUNCHER);//可省略            intent.setAction(Intent.ACTION_MAIN);//可省略        ComponentName cn = new ComponentName("com.activitylifecycledemo",         "com.activitylifecycledemo.SecondActivity");//访问的Activity名        intent.setComponent(cn);        startActivity(intent);

在知道主Activity名的情况下,以上方法也可访问主Activity。

访问系统设置

 Intent intent = new Intent(Settings.*********);//系统设置名    startActivity(intent);

更多系统设置名请点击:
http://blog.csdn.net/demonliuhui/article/details/51440227

访问系统默认程序

http://blog.csdn.net/xubright/article/details/8704873
http://www.open-open.com/lib/view/open1384349405211.html

0 0
原创粉丝点击