一个应用启动另一个应用+开机启动应用

来源:互联网 发布:linux终端退出命令 编辑:程序博客网 时间:2024/06/06 21:41

启动一个已安装的应用我们可以通过PackageManger类的getLaunchIntentForPackage(包名)(包名的设置有一定的规则,包名必须是我们要启动的应用的入口Activity所在的包名,否则会出现getLaunchIntentForPackage()返回null造成空指针的错误,若我们中间将入口Activity移动过位置,则清单文件中的manifest的属性Package应是入口Activity所在的包名,否则同样出现上述错误)获取Intent,通过startActivity进行跳转启动应用,调用跳转的应用必须添加权限

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />

实例:

应用一

布局

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

    xmlns:tools="http://schemas.android.com/tools"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    android:paddingBottom="@dimen/activity_vertical_margin"

    android:paddingLeft="@dimen/activity_horizontal_margin"

    android:paddingRight="@dimen/activity_horizontal_margin"

    android:paddingTop="@dimen/activity_vertical_margin"

    tools:context="com.example.mytest.MainActivity" >

 

    <Button

        android:id="@+id/button1"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:layout_alignParentTop="true"

        android:layout_centerHorizontal="true"

        android:layout_marginTop="128dp"

        android:text="跳转" />

 

</RelativeLayout>

Activity:

public class MainActivity extends Activity {

private Button button1;

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

        button1=(Button) findViewById(R.id.button1);

        button1.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

Intent toList=getPackageManager().getLaunchIntentForPackage("com.text.test");

startActivity(toList);

}

});

    }

}

应用二可以是任意一个应用,主要在于清单文件的内容

<?xml version="1.0" encoding="utf-8"?>

<manifest xmlns:android="http://schemas.android.com/apk/res/android"

    package="com.example.mytest2"

    android:versionCode="1"

    android:versionName="1.0" >

    <uses-sdk

        android:minSdkVersion="15" android:targetSdkVersion="21" />

    <application

        android:allowBackup="true" android:icon="@drawable/ic_launcher"

        android:label="@string/app_name"

        android:theme="@style/AppTheme" >

        <activity

            android:name=".MainActivity"

            android:label="@string/app_name" >

<!-- 入口的Activity,name查看所在包名,.代表manifestpackage属性,这两者若不一致虽不会影响本应用程序的启动,但若其他应用程序通过getLaunchIntentForPackage()获取Intent则会为null,则不能进行跳转,程序崩溃-->

          <intent-filter>

           <action android:name="android.intent.action.MAIN" />

           <category android:name="android.intent.category.LAUNCHER" />

          </intent-filter>

        </activity>

    </application>

</manifest>

 

开机自动启动服务和应用的实现

当我们开机时系统会发送一个广播,我们可以在将要开机启动的应用中添加一个静态的广播接收器,在onreceive()中按照上面的启动一个应用来启动我们自己的这个应用,就实现了开机启动,也可以在onreceive()中启动服务,就可以启动服务了,包名同样有上面的问题。记得添加上面的权限。

例子:

广播:

 

public class OpenAppBrooadcaseReceiverextends BroadcastReceiver{

 

@Override

public void onReceive(Context context, Intent intent) {

//若要启动一个服务我们可以直接启动

/*Intent service=new Intent("");//""中是服务的动作或服务的名称

context.startService(service);*/

//启动这个应用:他的动作是我们程序入口的activity所在的包名

Intent openAppIntent = context.getPackageManager().getLaunchIntentForPackage("com.example.horizontalscrollview_listview");

context.startActivity(openAppIntent);

}

}

清单文件

<?xml version="1.0" encoding="utf-8"?>

<manifest xmlns:android="http://schemas.android.com/apk/res/android"

    package="com.text.test"

    android:versionCode="1"

    android:versionName="1.0" >

    <uses-sdk

        android:minSdkVersion="8"  android:targetSdkVersion="21" />

 <uses-permission  android:name="android.permission.RECEIVE_BOOT_COMPLETED" />

    <application

        android:allowBackup="true"

        android:icon="@drawable/ic_launcher"

        android:label="@string/app_name"

        android:theme="@style/AppTheme" >

        <activity

            android:name="com.text.test.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>

        <receiver android:name="com.example.horizontalscrollview_listview.OpenAppBrooadcaseReceiver" >

            <intent-filter>

                <action android:name="android.intent.action.BOOT_COMPLETED" />

                <category android:name="android.intent.category.LAUNCHER" />

            </intent-filter>

        </receiver>

    </application>

</manifest>


项目下载:https://yunpan.cn/cMuwMTXhtkr7h (提取码:e18d)

https://yunpan.cn/cMuVEuIrWXakQ (提取码:a1d5)


0 0