我尝试使用本教程中的示例代码,但它似乎过时了,而且不起作用。所以我必须做出什么改变,什么文件有我的应用程序自动启动时,Android完成启动?
当前回答
我想在这个问题上补充一点,这是我几天来一直面临的问题。我试了所有的答案,但都不管用。如果你使用的是安卓5.1版本,请更改这些设置。
如果你使用的是android 5.1版本,那么你必须从应用程序设置中取消选择(限制启动)。
>应用>你的应用>限制启动(取消选择)
其他回答
此外,如果你不想修改代码,你可以使用像AutoStart这样的应用程序来启动一个android应用程序:AutoStart -没有根
Sean的解决方案最初并不适合我(Android 4.2.2)。我必须在同一个Android项目中添加一个虚拟活动,并在设备上手动运行该活动至少一次。然后Sean的解决方案开始工作,BroadcastReceiver在随后的重新启动后得到通知。
我想在这个问题上补充一点,这是我几天来一直面临的问题。我试了所有的答案,但都不管用。如果你使用的是安卓5.1版本,请更改这些设置。
如果你使用的是android 5.1版本,那么你必须从应用程序设置中取消选择(限制启动)。
>应用>你的应用>限制启动(取消选择)
这是如何让一个活动在android设备重启后开始运行:
将以下代码插入到AndroidManifest.xml文件中,在<application>元素中(而不是<activity>元素中):
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<receiver
android:enabled="true"
android:exported="true"
android:name="yourpackage.yourActivityRunOnStartup"
android:permission="android.permission.RECEIVE_BOOT_COMPLETED">
<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>
然后创建一个新类yourActivityRunOnStartup(匹配manifest中<receiver>元素指定的android:name):
package yourpackage;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
public class yourActivityRunOnStartup extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED)) {
Intent i = new Intent(context, MainActivity.class);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(i);
}
}
}
注意: 调用i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);重要,因为活动是从活动外部的上下文启动的。没有这一点,活动就不会开始。
此外,<receiver>标签中的值android:enabled, android:exported和android:permission似乎不是强制性的。应用程序接收没有这些值的事件。请看这里的例子。
监听ACTION_BOOT_COMPLETE并从那里做你需要做的事情。这里有一个代码片段。
更新:
答案上的原始链接下降了,所以根据评论,这里是链接代码,因为当链接下降时,没有人会错过代码。
在AndroidManifest.xml(应用程序部分)中:
<receiver android:enabled="true" android:name=".BootUpReceiver"
android:permission="android.permission.RECEIVE_BOOT_COMPLETED">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</receiver>
...
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
...
public class BootUpReceiver extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
Intent i = new Intent(context, MyActivity.class); //MyActivity can be anything which you want to start on bootup...
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(i);
}
}
来源:https://web.archive.org/web/20150520124552/http: / / www.androidsnippets.com/autostart-an-application-at-bootup
推荐文章
- 如何隐藏动作栏之前的活动被创建,然后再显示它?
- 是否有一种方法以编程方式滚动滚动视图到特定的编辑文本?
- 在Android中将字符串转换为Uri
- 如何在NestedScrollView内使用RecyclerView ?
- 移动到另一个EditText时,软键盘下一步点击Android
- Android应用中的GridView VS GridLayout
- Activity和FragmentActivity的区别
- 右对齐文本在android TextView
- 权限拒绝:start前台需要android.permission.FOREGROUND_SERVICE
- 如何更改android操作栏的标题和图标
- Android Split字符串
- 让一个链接在安卓浏览器启动我的应用程序?
- 如何在Android工作室的外部库中添加一个jar ?
- GridLayout(不是GridView)如何均匀地拉伸所有子元素
- 如何让一个片段删除自己,即它的等效完成()?