android - 通知操作不打开服务

标签 android service android-service wear-os

我正在尝试在我的应用程序中创建一个功能,让用户可以在他的可穿戴设备中说出文字。这有效并且在接收 Activity 中的数据时有效。只是现在我想在服务中接收数据,但这似乎行不通。该服务根本没有启动。

为可穿戴设备发出通知的代码:

            String replyLabel = "Adres";

        RemoteInput remoteInput = new RemoteInput.Builder("ADDRESS")
                .setLabel(replyLabel)
                .build();

        RemoteInput remoteInput2 = new RemoteInput.Builder("PLACE")
                .setLabel("Plaats van levering")
                .build();

        Intent replyIntent = new Intent(this, LogisticWearableListener.class);
        PendingIntent replyPendingIntent =
                PendingIntent.getService(this, 0, replyIntent,
                        PendingIntent.FLAG_CANCEL_CURRENT);

        NotificationCompat.Action action =
                new NotificationCompat.Action.Builder(R.drawable.lzicon,
                        getString(R.string.wearable_input_start), replyPendingIntent)
                        .addRemoteInput(remoteInput)
                        .addRemoteInput(remoteInput2)
                        .build();

        Notification notification =
                new NotificationCompat.Builder(logisticLoginInfoScreen)
                        .setSmallIcon(R.drawable.lzicon)
                        .setContentIntent(replyPendingIntent)
                        .setContentTitle("Order invoeren")
                        .extend(new NotificationCompat.WearableExtender().addAction(action))
                        .build();

        NotificationManagerCompat notificationManager =
                NotificationManagerCompat.from(logisticLoginInfoScreen);
        notificationManager.notify(55, notification);

这是服务代码:

public class LogisticWearableListener extends IntentService {
private String datum;
private String adres;
private LogisticAndroidApp app;

public LogisticWearableListener() {
    super("LogisticWearableListener");
    Log.d("called wearableserv", "called");
}

@Override
protected void onHandleIntent(Intent intent) {
        Log.d("LogisticWearableService", "Service Received.");
        app = (LogisticAndroidApp)getApplication();
        Bundle remoteInput = RemoteInput.getResultsFromIntent(intent);
        if (remoteInput != null) {
            CharSequence seq = remoteInput.getCharSequence("PLACE");
            datum = seq.toString();
            adres = remoteInput.getCharSequence("ADDRESS").toString();
            WearableOrder o = new WearableOrder();
            o.setAdres(adres);
            o.setPlace(datum);
            app.getDataManager().saveWearableOrder(o);
            //orders.add(o);
            //  initializeListView();
        }

    }
}

和 android list 声明:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="com.afc.mobile365.Test4Sure"
android:versionCode="222"
android:versionName="3.8.71">

<uses-sdk
    android:maxSdkVersion="23"
    android:minSdkVersion="14"
    android:targetSdkVersion="19" />

<uses-permission android:name="android.permission.INTERNET"></uses-permission>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />

<supports-screens
    android:anyDensity="true"
    android:largeScreens="true"
    android:normalScreens="true"
    android:smallScreens="true"></supports-screens>

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.NFC" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

<application
    android:name=".LogisticAndroidApp"
    android:icon="@drawable/lzicon"
    android:label="@string/app_name"
    android:largeHeap="true"
    tools:replace="android:icon">
    <activity
        android:name=".SplashActivity"
        android:label="@string/app_name"
        android:screenOrientation="portrait"
        android:theme="@style/Theme.Transparent"
        android:windowSoftInputMode="stateHidden">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

    <activity
        android:name=".LogisticActivity"
        android:label="@string/app_name"
        android:screenOrientation="portrait"
        android:theme="@style/Theme.Logistic"
        android:windowSoftInputMode="stateHidden">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </activity>
    <activity
        android:name=".LogisticLoginInfoScreen"
        android:launchMode="singleInstance"
        android:screenOrientation="portrait"
        android:theme="@style/Theme.Logistic"
        android:windowSoftInputMode="stateHidden"></activity>
    <activity
        android:name=".StartWorkDayActivity"
        android:noHistory="true"
        android:screenOrientation="portrait"
        android:theme="@style/Theme.Logistic"
        android:windowSoftInputMode="stateHidden"></activity>
    <activity
        android:name=".PlanningOrdersActivity"
        android:noHistory="true"
        android:screenOrientation="portrait"
        android:theme="@style/Theme.Logistic"
        android:windowSoftInputMode="stateHidden"></activity>
    <activity
        android:name=".StopWorkDayActivity"
        android:noHistory="true"
        android:screenOrientation="portrait"
        android:theme="@style/Theme.Logistic"
        android:windowSoftInputMode="stateHidden"></activity>
    <activity
        android:name=".StartWorkDayInfoActivity"
        android:noHistory="false"
        android:screenOrientation="portrait"
        android:theme="@style/Theme.Logistic"
        android:windowSoftInputMode="stateHidden"></activity>
    <activity
        android:name=".DeliveryListActivity"
        android:noHistory="false"
        android:screenOrientation="portrait"
        android:theme="@style/Theme.Logistic"
        android:windowSoftInputMode="stateHidden"></activity>
    <activity
        android:name=".DeliveryDetailActivity"
        android:screenOrientation="unspecified"
        android:theme="@style/Theme.Logistic"
        android:windowSoftInputMode="stateHidden"></activity>
    <activity
        android:name=".LogisticInfoActivity"
        android:noHistory="true"
        android:screenOrientation="portrait"
        android:theme="@style/Theme.Logistic"
        android:windowSoftInputMode="stateHidden"></activity>
    <activity
        android:name=".WisselActivity"
        android:noHistory="true"
        android:screenOrientation="portrait"
        android:theme="@style/Theme.Logistic"
        android:windowSoftInputMode="stateHidden"></activity>
    <activity
        android:name=".CustomerSigningActivity"
        android:noHistory="false"
        android:screenOrientation="portrait"
        android:theme="@style/Theme.Logistic"
        android:windowSoftInputMode="stateHidden"></activity>
    <activity
        android:name=".LogisticScanTagsActivity"
        android:screenOrientation="portrait"
        android:theme="@style/Theme.Logistic"
        android:windowSoftInputMode="stateHidden">

        <!-- android:noHistory="true" -->
    </activity>
    <activity
        android:name=".PauzeActivity"
        android:noHistory="true"
        android:screenOrientation="portrait"
        android:theme="@style/Theme.Logistic"
        android:windowSoftInputMode="stateHidden"></activity>
    <activity
        android:name=".StopPauzeActivity"
        android:noHistory="true"
        android:screenOrientation="portrait"
        android:theme="@style/Theme.Logistic"
        android:windowSoftInputMode="stateHidden"></activity>
    <activity
        android:name=".CameraActivity"
        android:noHistory="true"
        android:screenOrientation="landscape"
        android:theme="@style/Theme.Logistic"
        android:windowSoftInputMode="stateHidden"></activity>

    <service android:name="com.teamviewer.sdk.screensharing.api.TVSessionService" />
    <service
        android:name=".LogisticDBManagerService"
        android:icon="@drawable/appicon"
        android:label="@string/service_name"
        android:process=":logistic_background" />
    <service
        android:name=".LogisticDBGpsLocatieService"
        android:icon="@drawable/appicon"
        android:label="locationService" />

    <receiver
        android:name=".LogisticServiceStartupReceiver"
        android:process=":logistic_background">
        <intent-filter>
            <action android:name="android.intent.action.BOOT_COMPLETED" />
        </intent-filter>
    </receiver>
    <receiver
        android:name=".AlarmReceiver"
        android:process=":logistic_background" />
    <receiver
        android:name=".ATimeReceiver"
        android:process=":logistic_background2" />
    <receiver android:name=".FotoUploadAlarmReceiver" />
    <receiver android:name=".LocationChangedReceiver">
        <intent-filter>
            <action android:name="logistic.android.app.gps"></action>

            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </receiver>

    <activity
        android:name=".NavigationActivity"
        android:label="@string/title_activity_navigation"></activity>
    <activity
        android:name=".CacheFotosActivity"
        android:label="@string/title_activity_cache_fotos"
        android:noHistory="true"
        android:screenOrientation="portrait"
        android:theme="@style/Theme.Logistic"></activity>
    <activity
        android:name=".OrderRegelActivity"
        android:label="@string/title_activity_bon"
        android:noHistory="true"
        android:screenOrientation="landscape"
        android:theme="@style/Theme.Logistic"></activity>
    <activity
        android:name=".OrderRegelOverviewActivity"
        android:label="@string/title_activity_order_regel_overview"
        android:noHistory="true"
        android:screenOrientation="landscape"
        android:theme="@style/Theme.Logistic"></activity>
    <activity
        android:name=".OrderRegelCheckboxActivity"
        android:label="@string/title_activity_order_regel_checkbox"></activity>
    <activity
        android:name=".EmballageActivity"
        android:label="@string/title_activity_emballage"
        android:noHistory="true"
        android:theme="@style/Theme.Logistic"></activity>
    <activity
        android:name=".DialogActivity"
        android:label="@string/title_activity_dialog"
        android:screenOrientation="portrait"
        android:theme="@style/Theme.Logistic"></activity>
    <activity
        android:name=".ScanTestActivity"
        android:label="@string/title_activity_scan_test"
        android:theme="@style/Theme.Logistic"></activity>
    <activity
        android:name=".LogisticScanEmbaActivity"
        android:label="@string/title_activity_logistic_scan_emba"
        android:screenOrientation="portrait"
        android:theme="@style/Theme.Logistic"></activity>
    <activity
        android:name=".TankRegistratieActivity"
        android:label="@string/title_activity_tank_registratie"
        android:screenOrientation="portrait"
        android:theme="@style/Theme.Logistic"></activity>
    <activity
        android:name=".LaadLijstEmballageActivity"
        android:label="@string/title_activity_laad_lijst_emballage"
        android:screenOrientation="portrait"
        android:theme="@style/Theme.Logistic"></activity>
    <activity
        android:name=".TestScanActivity"
        android:label="@string/title_activity_test_scan"></activity>

    <!-- Register Service -->
    <activity
        android:name=".LaadLijstOntvangEmballageActivity"
        android:label="@string/title_activity_laad_lijst_ontvang_emballage"
        android:screenOrientation="portrait"
        android:theme="@style/Theme.Logistic"></activity>
    <!--
         ATTENTION: This was auto-generated to add Google Play services to your project for
         App Indexing.  See https://g.co/AppIndexing/AndroidStudio for more information.
    -->
    <meta-data
        android:name="com.google.android.gms.version"
        android:value="@integer/google_play_services_version" />

    <activity android:name=".Wearable.WearableActivity" android:label="Plaats Order"
        android:screenOrientation="portrait"
        android:theme="@style/Theme.Logistic"></activity>
</application>

<service android:name=".LogisticWearableListener" android:exported="true">
</service>

最佳答案

您的 Service 需要“导出”,以便其他组件(在本例中为 NotificationManager)可以启动它。

android:exported="true" 添加到您的 Service 的 list 条目中。

关于android - 通知操作不打开服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36309518/

相关文章:

java - Android XML 解析 - 标签内有标签的 XML

angular - Angular 4 中的并行 HTTP 请求

android - 如何向 Android 窗口管理器添加 float View 并监听系统/硬件后退按钮事件

android - 从单例绑定(bind)服务

android - 当应用程序来自后台时总是触发观察者

android - 资源 'attr/font' 的重复值与配置“

Android 4.3 BTLE 作为服务器 : How to start advertisements?

java - Spring 中的长期运行服务?

WCF服务设计问题

android - 从服务恢复 android Activity