dev*_*per 1 android startup broadcastreceiver
我已设法实现以下方法编码,允许应用程序在设备启动/启动时执行自动启动.但是,当我测试了实现代码时,它无法正常工作,应用程序在启动设备时无法执行自动启动.任何人都可以帮助或建议我可能的可能性?谢谢.
的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>
Run Code Online (Sandbox Code Playgroud)
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)
}
}
Run Code Online (Sandbox Code Playgroud)
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) {
...........
}
Run Code Online (Sandbox Code Playgroud)
从Android 3.1开始,新安装的应用程序始终处于"停止"状态,将其移出停止状态的唯一方法是至少手动启动应用程序的任何活动一次.
对于你的问题,
1)您需要设计一种机制,用户需要在安装应用程序后首先手动打开应用程序的任何活动.
2)之后,您的BootReceiver将正常工作,它将能够自动启动该应用程序的任何活动.您的实施绝对正确.
我在我的一个应用程序中遇到了同样的问题,每次设备启动时我都会尝试打开一个Activity,但它不适用于新安装的应用程序.一旦用户手动打开应用程序至少一次,应用程序就会退出"已停止"状态,一切正常.
编辑
1)请确保<uses-permission>该<manifest>标签的直接子项.
2)android:installLocation="internalOnly"如果应用程序安装在SD卡中,请确保您另外指定不会收到任何引导完成操作.
3)正如我之前解释的那样.

从Android 3.1开始,所有应用程序都处于停止状态,这与用户强制关闭任何应用程序时相同.
在此状态下,应用程序不会出于任何原因自动运行,除非用户从启动器手动启动.
意味着ACTION_PACKAGE_INSTALLED, BOOT_COMPLETED在用户手动启动应用程序之前您将不会收到等.谷歌已采取此决定,以防止恶意软件应用程序自动启动.用户需要至少打开一次该应用程序,以便在此之后自动执行操作.
希望我这次说清楚.谢谢.
| 归档时间: |
|
| 查看次数: |
4409 次 |
| 最近记录: |