相关疑难解决方法(0)

如何在Doze模式Android 6.0中使用WhiteList应用程序

这个问题与Android 6.0 Preview 3有关,它将在本月底发布.

我在Nexus 5'hackhead'的谷歌预览版3中测试Android 6.0中的一些东西.

新功能是"打盹模式" - 类似于深度睡眠模式,当网络被禁用和手机休眠时,只有SMS,呼叫或高优先级GCM消息才能将其唤醒.但是像WhatsApp一样 - 在打盹模式下,它在2小时或更长时间后接收消息取决于计时器.但是有一个名为"白名单"的"未优化"应用列表,您可以手动添加应用.

好的,我想找到一种方法来以编程方式添加我的应用程序而无需用户交互到电池设置中设备中存在的"白名单应用列表".

试着用反射进入它我发现:

在android.os.IDeviceIdleController中有一个方法:

public abstract void addPowerSaveWhitelistApp(String packageNameOfApp)

但这是一个接口......所以我们不能创建一个接口实例.

目前还没有关于此接口或方法或任何继承树的文档.

也许你有一些想法我应该在哪里寻找以编程方式添加我的应用程序的可能性?

还有一种方法

public abstract boolean isPowerSaveWhitelistApp(String packageName)

我认为应该可以以某种方式访问​​?!检查应用程序是否存在于白名单中,也许最后希望ASK用户将其添加到白名单.

所以我的问题是,有没有人试图用更好的结果做出一些事情?因为我被困住了,我认为这是一个死胡同.

了解更多信息:https://newcircle.com/s/post/1739/2015/06/12/diving-into-android-m-doze

java android preview android-6.0-marshmallow

51
推荐指数
6
解决办法
5万
查看次数

Android 7.0(Nougat)打盹模式停止Web服务

我有一个带有WiFi锁的Android前台服务,它充当另一个本地设备的Web服务.在打盹模式之前,获取WiFi锁并根据需要提供服务非常有效.

即使关闭了我的应用程序的电池优化功能,当屏幕关闭几分钟时,手机仍然会杀死应用程序.

如何正确警告Android明确地在前台执行客户请求的服务,并且他们此时不希望他们的手机进入睡眠状态?

编辑:这个问题仍然存在于Android 8.0(奥利奥)

android android-wifi android-doze

19
推荐指数
1
解决办法
873
查看次数

在Android 6.0上,Alarm Manager无法在后台运行

这是我的Activity代码,

Long time = new GregorianCalendar().getTimeInMillis()+20000;//Setting alarm after 20 sec
Intent intentAlarm = new Intent("alarm");
intentAlarm.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intentAlarm.putExtra("req_code",10);
PendingIntent pendingIntent = PendingIntent.getBroadcast(context,10, intentAlarm, PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
alarmManager.set(AlarmManager.RTC_WAKEUP, time, pendingIntent);
Run Code Online (Sandbox Code Playgroud)

这些是我在我的应用中拥有的所有权限,

  <uses-permission android:name="android.permission.VIBRATE" />
    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
    <uses-permission android:name="android.permission.GET_ACCOUNTS"/>
    <uses-permission android:name="com.myapp.pack.permission.SET_ALARM"/>
    <uses-permission android:name="android.permission.WAKE_LOCK" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
Run Code Online (Sandbox Code Playgroud)

这是我的BroadcastReceiver代码,

@Override
public void onReceive(Context context, Intent intent) {
        SharedPreferences sharedPreferences =
        context.getSharedPreferences( "mydata", Context.MODE_PRIVATE);
        SharedPreferences.Editor editor = sharedPreferences.edit();
        editor.putBoolean("elligible",true);
        editor.apply();

    }
Run Code Online (Sandbox Code Playgroud)

BroadcastReceiver在清单上注册了我的,

 <receiver …
Run Code Online (Sandbox Code Playgroud)

android android-intent android-alarms android-broadcast android-broadcastreceiver

12
推荐指数
2
解决办法
1万
查看次数

Android上未收到通知

我正在开发一个android应用程序,其主要用途是在设定的时间显示通知(某些特定的日历应用程序).其中一个主要的抱怨是,用户不会(总是)接收通知,而我最终会陷入困境.

我们在仿真器上对Android 4.4,6,7.0,7.1,8.0,8.1进行了内部测试,并使用了大约10个真实设备(6到8.1),所有设备都按时收到了通知.即使在重新启动时,通知也都按时收到.

我们遇到的一件事是Samsung设备上的SecurityException(> 500个已注册的警报),我们之前因为无法取消而触发了这些警报.它看起来不再是一个问题.

那么,这些缺失通知的原因是什么?它是特定于设备的设置,它是一个简单的错误吗?或者还有其他因素在这里发挥作用?

这是我们使用的代码:

private void cancelAlarm(String notificationId, Class<? extends AbstractReceiver> receiverClass)
        throws BroadcastException {
    /*
     * Create an intent that looks similar, to the one that was registered using add. Making sure the notification id in the action is the same. Now we can search for
     * such an intent using the 'getService' method and cancel it.
     */
    final Intent intent = new Intent(this.context, receiverClass);
    intent.setAction(notificationId);

    final PendingIntent pi = PendingIntent.getBroadcast(this.context, 0, …
Run Code Online (Sandbox Code Playgroud)

android alarmmanager android-notifications

7
推荐指数
3
解决办法
1402
查看次数