在三星 Galaxy Tab 3 上调用了闹钟,但在 LeEco Le2 上没有调用

Posted

技术标签:

【中文标题】在三星 Galaxy Tab 3 上调用了闹钟,但在 LeEco Le2 上没有调用【英文标题】:Alarm is called on Samsung Galaxy Tab 3, But not called on LeEco Le2 【发布时间】:2017-09-09 12:04:21 【问题描述】:

我正在开发一个应用程序,它会在未来的适当时间发送通知。如果我在主要活动中调用 AlarmManager.init () - 它应该在三星 Galaxy Tab 3 和 LeEco Le 2 上 5 秒后给我 Toast。但是,如果我调用 AlarmManager.init () 并杀死我的应用程序(将其关闭)- 我仍然在三星 Galaxy Tab 3 上得到 Toast,但在 LeEco Le 2 上没有得到它。我的问题是什么?

报警管理器:

public class AlarmManager 

static android.app.AlarmManager alarmManager;
static Context context;

public static void init (Context c) 
    context = c;
    alarmManager = (android.app.AlarmManager) context.getSystemService(ALARM_SERVICE);

    Intent intent = new Intent("com.fome.planner");
    PendingIntent alarmIntent = PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);

    alarmManager.set(android.app.AlarmManager.ELAPSED_REALTIME_WAKEUP,
            SystemClock.elapsedRealtime() +
                    5 * 1000, alarmIntent);


接收者:

public class MyReceiver extends WakefulBroadcastReceiver 

@Override
public void onReceive(Context context, Intent intent) 
    // TODO: This method is called when the BroadcastReceiver is receiving
    // an Intent broadcast.
    Log.e("type", intent.getAction());
    StringBuilder msgStr = new StringBuilder("current time: ");
    Format formatter = new SimpleDateFormat("hh:mm:ss a");
    msgStr.append(formatter.format(new Date()));
    Toast.makeText(context, msgStr, Toast.LENGTH_SHORT).show();


清单:

<?xml version="1.0" encoding="utf-8"?>

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>

<application
    android:name="android.support.multidex.MultiDexApplication"
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:supportsRtl="true"
    android:theme="@style/Theme.AppCompat.NoActionBar">
    <activity android:name=".DayActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <!--
         The API key for Google Maps-based APIs is defined as a string resource.
         (See the file "res/values/google_maps_api.xml").
         Note that the API key is linked to the encryption key used to sign the APK.
         You need a different API key for each encryption key, including the release key that is used to
         sign the APK for publishing.
         You can define the keys for the debug and release targets in src/debug/ and src/release/.
    -->
    <meta-data
        android:name="com.google.android.geo.API_KEY"
        android:value="@string/google_places_key" />

    <activity android:name=".TaskCreationActivity" />
    <activity android:name=".CalendarActivity" />
    <activity android:name=".ListActivity" />

    <receiver
        android:name=".MyReceiver"
        android:process=":remote"
        android:enabled="true"
        android:exported="true">
        <intent-filter>
            <action android:name="com.fome.planner"/>
        </intent-filter>
    </receiver>
    <receiver 
        android:name=".MyReceiver" 
        android:enabled="true">
        <intent-filter>
            <action android:name="android.intent.action.BOOT_COMPLETED" />
        </intent-filter>
    </receiver>
</application>

【问题讨论】:

如果我不得不猜测,乐视做了一些愚蠢的事情,并将应用滑动行为与设置中应用页面上“强制停止”按钮后面的相同逻辑联系起来。你可以稍微延长你的时间段(例如,一分钟),然后再试一次。在等待闹钟响起时,使用adb shell dumpsys alarm 查看您的闹钟是否出现。如果警报丢失,则他们正在取消警报(例如,作为强制停止处理的一部分)。如果警报在那里并在 1 分钟后响起,则可能是节电的最小警报时间。如果警报在那里并且没有响起......? 我已将时间设置为 1 分钟,启动我的应用程序并运行“adb shell dumpsys alarm”。它给了我一个警报列表,但我没有在其中找到我的应用程序。而且我什至没有杀死我的应用程序。并且警报已经响起(Toast 出现了)。 也许这个设备比我想象的更糟。 当我对三星进行同样的尝试时 - 我看到了我的警报。感谢您清除这一切。还有什么建议吗? 拿大锤去乐视? :-) 除此之外,我真的不知道该告诉你什么。我已将 Le 2 添加到我的“要购买的奇怪设备”列表中。 【参考方案1】:

当您在 LeEco Le2 上将应用程序关闭,而三星将您的应用程序置于后台时,该应用程序可能会被终止。检查应用程序页面,看看它是否在滑动后仍在运行,或者它是否处于强制停止状态。

【讨论】:

在我在三星和乐视上杀死我的应用程序后,他们都在 Android Studio 中记录一些内容。所以,如果我理解正确的话,它们都没有处于强制停止状态。也许是 API 的差异? 我认为这与臭名昭著的中国供应商试图保护电池有关。也请阅读 CommonsWare 先生的评论,他更深入地研究了这个问题。

以上是关于在三星 Galaxy Tab 3 上调用了闹钟,但在 LeEco Le2 上没有调用的主要内容,如果未能解决你的问题,请参考以下文章

无法在三星 Galaxy Tab 2 和 Note 上获取位置

三星Galaxy Tab S2上市,压制苹果之心凸显

Android:如何从三星 Galaxy Tab 获取 data/anr/traces.txt?

应用程序运行时无法在三星 Galaxy Tab 7.7 P6800 上设置 android 应用程序的音量

jquery mobile可折叠和galaxy tab 10.1 json响应给出随机响应

模拟三星 Galaxy Tab