在Android中启动设备时,应用程序不会自动启动应用程序

时间:2015-07-11 04:28:32

标签: android broadcastreceiver startup

我设法实现了以下方法编码,允许应用在设备启动/启动时执行自动启动。但是,当我测试了实现代码时,它无法正常工作,应用程序在启动设备时无法执行自动启动。任何人都可以帮助或建议我可能的可能性?谢谢。

的Manifest.xml

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

<receiver android:enabled="true" android:exported="true"
          android:name="com.dapoaugury.apps.robotapp.AutoStartUp"
          android:permission="android.permission.RECEIVE_BOOT_COMPLETED"
          android:installLocation="internalOnly">
    <intent-filter>
        <action android:name="android.intent.action.BOOT_COMPLETED" />
        <action android:name="android.intent.action.QUICKBOOT_POWERON" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</receiver>

AutoStartup.java

package com.dapoaugury.apps.robotapp;


/**
  * To Auto-Start Application on Device Start-up/ Boot
  * Created by dev02 on 10/7/15.
 */
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;

public class AutoStartUp extends BroadcastReceiver{

    @Override
    public void onReceive(Context context, Intent intent) {
        if (intent.getAction().equalsIgnoreCase(Intent.ACTION_BOOT_COMPLETED)){
            //To start new intent when phone starts up
            Intent i = new Intent(context, MainActivity.class);
            // To put activity on the top of the stack since activity is launched from context outside activity
            i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            // EDITED
            i.addFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES);
            context.startActivity(i);
        }
        //To Start Application on Phone Start-up - 10/7/2015(END OF VERSION)
    }
}

MainActivity.java(假设首次安装应用时手动启动的机制)

public class MainActivity extends Activity {


public static long AppElapsedTime;
public static long AppElapseTime_hr;
public static long Process_startTime = System.nanoTime();
public static long CurrentProcTime;
private static Context context;

public final static int GREEN = 0;
public final static int BLUE = 1;

private static int cTheme = GREEN;

WebView webView;
ProgressBar pb;

@Override
public void onCreate(Bundle savedInstanceState) {
...........
}

2 个答案:

答案 0 :(得分:6)

从Android 3.1开始,新安装的应用程序始终处于“已停止”状态,将其移出停止状态的唯一方法是至少手动启动应用程序的任何活动

对于你的问题,

1)您需要设计一种机制,用户在安装应用程序后需要首先手动打开应用程序的任何活动。

2)之后,您的BootReceiver将正常工作,它将能够自动启动该应用程序的任何活动。您的实施绝对正确。

我在其中一个应用中遇到了同样的问题,每次设备启动时我都会尝试打开一个活动,但它不适用于新安装的应用。一旦用户至少手动打开应用程序一次,该应用程序就会退出“已停止”状态,一切正常。

修改

1)请确保<uses-permission><manifest>代码的直接子代。

2)请确保指定android:installLocation="internalOnly",否则如果应用程序安装在SD卡中,您将不会收到任何启动完成操作。

3)正如我之前所解释的那样。

enter image description here

在Android 3.1中,所有应用都处于停止状态,这与用户强制关闭任何应用时相同。

在此状态下,应用程序不会因任何原因自动运行,除非用户从启动器手动启动,否则

意味着在用户手动启动应用之前,您不会收到ACTION_PACKAGE_INSTALLED, BOOT_COMPLETED等。谷歌已采取此决定,以防止恶意软件应用程序自动启动。用户需要至少打开一次该应用程序,以便在此之后自动执行操作。

希望我这次说清楚了。感谢。

答案 1 :(得分:2)

新安装的应用程序放置在&#34;已停止&#34;状态直到应用程序第一次实际启动。在此状态下,您的所有组件都不会被激活,因此您的BOOT_COMPLETED接收器将无法运行。您需要包含一个活动并由用户打开;您可以随后使用PackageManager停用活动。

此行为是在Android 3.1中引入的,您可以阅读in the release notes(标题为&#34;启动已停止的应用程序控件&#34;)。