我有一个服务"GroupsTaskAlarmChecker",它由GroupsManager在onCreate的Groups.class活动中每隔20秒调用一次:
int seconds = 20;
Intent myIntent = new Intent(Groups.this, GroupsTaskAlarmChecker.class);
pendingIntent = PendingIntent.getService(Groups.this, 0, myIntent, 0);
AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE);
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.add(Calendar.SECOND, 10);
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), seconds * 1000, pendingIntent);
Run Code Online (Sandbox Code Playgroud)
这非常有效.但是我需要在设备启动时这样做.然后我知道我必须像这样制作AndroidManifest:
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<receiver android:name=".ReceiverBoot">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED">
<category android:name="android.intent.category.HOME">
</category></action></intent-filter>
</receiver>
Run Code Online (Sandbox Code Playgroud)
然后mi broadcastReceiver像这样:
public class ReceiverBoot extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
int seconds = 20;
Intent myIntent = new Intent(context, GroupsTaskAlarmChecker.class);
pendingIntent = PendingIntent.getService(context, 0, myIntent, 0);
AlarmManager …Run Code Online (Sandbox Code Playgroud) service android broadcastreceiver alarmmanager bootcompleted
它显示,错误表明"没有符合条件的应用安装设备"
设备规格如下,
型号:联想A369i
Android OS版本:4.2.2
我在android mainfest文件中执行以下权限
<uses-permission android:name="android.permission.CLEAR_APP_CACHE" />
<uses-permission android:name="com.ylogtrack.activity.permission.MAPS_RECEIVE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.BLUETOOTH" />
Run Code Online (Sandbox Code Playgroud)
PLZ建议
代码-
public class ShutdownReceiver extends BroadcastReceiver {
private static final String TAG = "ShutdownReceiver";
@Override
public void onReceive(final Context context, final Intent intent) {
Logger.i(TAG, "Shutting Down..........................");
if("android.intent.action.ACTION_SHUTDOWN".equals(intent.getAction())) {
//Power Off
}
}
}
Run Code Online (Sandbox Code Playgroud)
服务-
private BroadcastReceiver mReceiver = null;
@Override
public void onCreate() {
super.onCreate();
// INITIALIZE RECEIVER
//It is used to register broadcast for ShutDown or Power Off
IntentFilter filter = new IntentFilter(Intent.ACTION_SHUTDOWN);
mReceiver = new ShutdownReceiver();
registerReceiver(mReceiver, filter);
}
@Override
public void onDestroy() {
unregisterReceiver(mReceiver);
}
Run Code Online (Sandbox Code Playgroud)
权限- …
我正在编写一个小型 android 应用程序,它在设备启动时启动我的服务。应用程序在所有 Android 版本 4.4.2(Mi Note 4G,必须在其安全应用程序中启用权限)、5.0(Lenovo K3 Note)、5.1(一加一)、6(Nexus 5)的手机上运行良好,除了一台运行 Android 5.0 的手机(联想 A1000,启动器类似于 MiUI)。应用程序仅安装在内部存储上。在设备重新启动之前使用/启动应用程序一次。以下是清单和广播接收器文件的摘录
清单.xml:
<receiver android:name="com.company.Broadcast"? android:permission="android.permission.RECEIVE_BOOT_COMPLETED">?
<intent-filter>?
<action android:name="android.intent.action.BOOT_COMPLETED" />?
<category android:name="android.intent.category.LAUNCHER" />?
</intent-filter>?
</receiver>
? <service android:enabled="true" android:exported="false" android:name="com.company.service" />
Run Code Online (Sandbox Code Playgroud)
广播接收器:
public class Broadcast extends BroadcastReceiver {?
private static final String TAG = “BroadcastReceiver";?
@Override?
public void onReceive(Context context, Intent intent) {?
Log.d(TAG, "onReceive");?
Intent service = new Intent(context, Service.class);?
service.setFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES);?
context.startService(service);
? }?
? }
Run Code Online (Sandbox Code Playgroud)
一些预安装的应用程序在启动时可以正常启动,而有些则被跳过。我的应用程序恰好在跳过的应用程序列表中。
以下是设备启动时 logcat 中的一些行,
01-18 17:02:58.933 504-560/? I/PackageManager: Package …Run Code Online (Sandbox Code Playgroud) 我想在运行Android 7.1.1的真实设备上测试启动接收器(android.intent.action.BOOT_COMPLETED),我尝试从命令提示符下使用以下命令:
adb shell正在广播-a android.intent.action.BOOT_COMPLETED -p [package_name]
但它会返回广告异常:
java.lang.SecurityException: Permission Denial: not allowed to send broadcast android.intent.action.BOOT_COMPLETED from pid=11114, uid=2000
at android.os.Parcel.readException(Parcel.java:1684)
at android.os.Parcel.readException(Parcel.java:1637)
at android.app.ActivityManagerProxy.broadcastIntent(ActivityManagerNative.java:3537)
at com.android.commands.am.Am.sendBroadcast(Am.java:772)
at com.android.commands.am.Am.onRun(Am.java:404)
at com.android.internal.os.BaseCommand.run(BaseCommand.java:51)
at com.android.commands.am.Am.main(Am.java:121)
at com.android.internal.os.RuntimeInit.nativeFinishInit(Native Method)
at com.android.internal.os.RuntimeInit.main(RuntimeInit.java:262)
Run Code Online (Sandbox Code Playgroud)
我已经尝试过Android提供的解决方案-尝试在启动时测试服务(java.lang.SecurityException:权限拒绝),但是它对我不起作用。
我该如何解决?
提前致谢!:)
我想在我的 Android 应用程序中收听 APN 更改。
因此,我在android.intent.action.BOOT_COMPLETED. 此服务启动一个 ContentObserver,它侦听
content://telephony/carriers/preferapn.
我在几个不同的设备上测试了这个设置(例如 LG Spirit with Android 5.0、Samsung A3 with 6.0、Emulator Nexus5 with 7.0 和 Huawei P9 Lite with 7.0)
在onCreate我的服务的华为手机上没有调用。
我的另一种方法与Manifest 中注册的android.intent.action.ANY_DATA_STATEa 相结合,BroadcastReceiver在这款手机上也不起作用。
我的清单的相关部分:
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
...
<receiver android:name=".ConnectivityChangeReceiver">
<intent-filter>
<action android:name="android.intent.action.ANY_DATA_STATE" />
</intent-filter>
</receiver>
<receiver android:name=".APNChangedServiceStarter" >
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
<action android:name="android.intent.action.QUICKBOOT_POWERON" />
<action android:name="com.htc.intent.action.QUICKBOOT_POWERON"/>
</intent-filter>
</receiver>
<service android:name=".APNChangedService"></service>
Run Code Online (Sandbox Code Playgroud) android android-intent android-service bootcompleted huawei-mobile-services
我有一个非常奇怪的问题,网站上已有的问题都没有答案或相同的问题.
我有一个接收BOOT_COMPLETED的应用程序.我确保它可以通过将android:installLocation设置为internalOnly来获得意图.我的OnBoot类中有一个Log.Debug,确认它是否被调用.
我有两个设备,Android 2.2和Honeycomb.在Android 2.2上,它工作正常,但蜂窝...
如果我使用eclipse的"运行"按钮在蜂窝平板电脑上安装应用程序,则在平板电脑启动时会调用onBoot.
如果我在导出*.apk文件后在蜂窝平板电脑上安装应用程序,则永远不会调用onBoot.
如果我在导出*.apk文件后在蜂窝平板电脑上安装应用程序,并在重新启动之前手动启动活动,则调用onBoot.
似乎应用程序需要至少启动一次其活动才能注册接收器......感觉不对,因为应用程序可能没有活动,而且Froyo不会那样工作......
我有一个接收器类侦听几个动作,但它无法捕获android.intent.action.BOOT_COMPLETED动作.我做错了什么?这是我的清单文件:
<uses-sdk android:minSdkVersion="7" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<!--<receiver android:name=".OtherReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>-->
<receiver android:name="com.myApp.AppReceiver" android:permission="android.permission.RECEIVE_BOOT_COMPLETED">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
<action android:name="android.intent.action.PACKAGE_ADDED"/>
<action android:name="com.myApp.wifitimer"/>
<action android:name="android.intent.action.PACKAGE_REPLACED" />
<data android:scheme="package" android:path="com.myApp" />
</intent-filter>
</receiver>
Run Code Online (Sandbox Code Playgroud)
可以看出我在接收器中再次添加了权限,接收者的名字获得了该类的全名,如此答案所示.
这是广播接收器类:
@Override
public void onReceive(Context arg0, Intent arg1) {
String action1 = arg1.getAction();
if(action1.equals(Intent.ACTION_BOOT_COMPLETED)) {
Log.d("receiver","action is: boot");
}
if(action1.equals("android.intent.action.PACKAGE_REPLACED")) {
Log.d("receiver","action is: package");
}
}
Run Code Online (Sandbox Code Playgroud)
当我运行应用程序时,接收器捕获android.intent.action.PACKAGE_REPLACED但是当我重新启动手机时,接收器无法捕获BOOT_COMPLETED.
然而,当我在评论.OtherReceiver中Mainfest文件,它可以抓住它!
这是这个类的代码:
public class OtherReceiver …Run Code Online (Sandbox Code Playgroud) 简单的问题:重启后AlarmManager 总是清除?在所有设备上重启后,即使用户在启动设备后很快启动设备,它是否会被清除?
我需要知道这一点,因为我重新创建了应用程序的警报OnBootReceiver,我想避免设置双重警报.
我目前正在开发一个包含Boot_Completed Broadcast接收器概念的应用程序.我已经在我的摩托罗拉Moto G手机中测试了这款应用.该应用程序运行正常,并显示Toast消息.但是当我在XIAOMI Redmi 1S手机中测试这个应用程序时,它不会显示Toast消息.
我已经看到很多类似于我的问题的问题(如 问题1,问题2等)......但我没有解决这个问题.
我的清单:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.demoapp"
android:versionCode="1"
android:versionName="1.0"
android:installLocation="internalOnly" >
<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.example.demoapp.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.demoapp.MyReceiver"
android:enabled="true"
android:exported="true" >
<intent-filter >
<action android:name="android.intent.action.BOOT_COMPLETED"/>
</intent-filter>
</receiver>
</application>
</manifest>
Run Code Online (Sandbox Code Playgroud)
MyReceiver.java
public class MyReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if ("android.intent.action.BOOT_COMPLETED".equalsIgnoreCase(intent.getAction())) …Run Code Online (Sandbox Code Playgroud) 基本上我正在尝试创建一个包含重新启动设备的按钮的活动,并在重新启动后返回到相同的活动.
我知道这个问题可能会与其他人重新启动设备,但这不是这个问题的焦点,因为我可以让设备重新启动.
我已经让按钮重新启动设备,但是在重新启动完成后我可以让它启动活动的唯一方法是BOOT_COMPLETED在清单中注册广播接收器.麻烦的是这个方法每次设备启动时都会启动活动,这是不受欢迎的.当我在按钮上注册接收器时单击侦听器,它在重新启动后不会启动活动.
我想知道是否可能有一个额外的BOOT_COMPLETED,我可以用它来决定是否有意重新启动.
任何建议将不胜感激,提前谢谢!
在 AndroidManifest 文件中,我想在用户重新启动设备时捕获 BOOT_COMPLETED 事件。我正在添加此权限:
“使用权限 android:name="android.permission.RECEIVE_BOOT_COMPLETED”
我在 Stackoverflow 上看到了其他人使用的两个“意图过滤器”:
“Intent.ACTION_BOOT_COMPLETED”和
“android.intent.action.BOOT_COMPLETED”
这里的首选操作字符串是什么?请指教和解释。
我试图以编程方式注册接收器以进行操作android.intent.action.BOOT_COMPLETED,即让我接收一个名为BootReceiver 的接收器类,它扩展了BroadCastReceiver类.
所以在我的一个活动课中我编写了这段代码,
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction("android.intent.action.BOOT_COMPLETED");
intentFilter.addAction("android.intent.action.PACKAGE_REPLACED");
BootReceiver receiver = new BootReceiver();
getApplicationContext().registerReceiver(receiver, intentFilter);
Run Code Online (Sandbox Code Playgroud)
我试图同时更新app以及boot_completed动作到同一个广播接收器.
所以我尝试的是,我通过注册上面的代码运行活动,然后重新启动设备.我没有得到任何回调BootReceiver onReceive()方法.
是否可以以编程方式为boot_completed操作声明接收器,或者是否有必要在清单文件中声明接收器.
实际上我的要求是以编程方式声明它.
提前致谢.
android intentfilter broadcastreceiver android-manifest bootcompleted
android ×13
bootcompleted ×13
alarmmanager ×2
java ×2
service ×2
action ×1
gps ×1
intentfilter ×1
powermanager ×1
reboot ×1
receiver ×1