0

ソニーのスマートウォッチで一度通知を追加する方法を知っている人はいますか? SampleNotificationExtension に従いました。SampleExtensionService で知っているように、イベントの挿入を開始するために関連するメソッドが 2 つあります。

    /**
     * Start periodic data insertion into event table
     */
    private void startAddData() {
        AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
        Intent i = new Intent(this, SampleExtensionService.class);
        i.setAction(INTENT_ACTION_ADD);
        PendingIntent pi = PendingIntent.getService(this, 0, i, 0);
        am.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime(),
                INTERVAL, pi);
    }

    /**
     * Cancel scheduled data insertion
     */
    private void stopAddData() {
        AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
        Intent i = new Intent(this, SampleExtensionService.class);
        i.setAction(INTENT_ACTION_ADD);
        PendingIntent pi = PendingIntent.getService(this, 0, i, 0);
        am.cancel(pi);
    }

出力には通知が表示されますが、特定の秒ごとに繰り返されます。特定の通知を一度表示できるように、イベントの処理方法を知っている人はいますか?ありがとう

4

2 に答える 2

3

ExtensionService は、他の Android サービスと同様に機能します。Contextインスタンスを介して通知サービスにインテントを送信するだけです。

public class SampleExtensionService extends ExtensionService {
    public static final String EXTENSION_KEY = "sample.app";
    public static final String EXTENSION_SPECIFIC_ID = "notification.id";
    public static final String INTENT_ACTION_ADD = "add";
    public static final String EXTRA_EVENT_CONTENT = "extra.eventcontent";

    public SampleExtensionService() {
        super(EXTENSION_KEY);
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        int retVal = super.onStartCommand(intent, flags, startId);
        if ((intent != null) && (intent.getAction().equals(INTENT_ACTION_ADD))) {
            if (intent.getExtras() != null) {
                displayEvent(intent.getExtras());
            }
        }
        return retVal;
    }

    private void displayEvent(Bundle extras) {
        long sourceId = NotificationUtil.getSourceId(this, EXTENSION_SPECIFIC_ID);
        if (sourceId == NotificationUtil.INVALID_ID) {
            return;
        }

        ContentValues values = new ContentValues();
        values.put(Notification.EventColumns.DISPLAY_NAME, "New event");
        values.put(Notification.EventColumns.MESSAGE, extras.getString(EXTRA_EVENT_CONTENT));
        values.put(Notification.EventColumns.PERSONAL, 1);
        values.put(Notification.EventColumns.PUBLISHED_TIME, System.currentTimeMillis());
        values.put(Notification.EventColumns.SOURCE_ID, sourceId);

        getContentResolver().insert(Notification.Event.URI, values);
    }
}

このアクティビティから、サービスのインテントを送信します

public class MainActivity extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        Button sendButton = (Button) findViewById(R.id.send_button);
        sendButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(MainActivity.this, SampleExtensionService.class);
                intent.setAction(SampleExtensionService.INTENT_ACTION_ADD);

                Bundle extras = new Bundle();
                extras.putString(SampleExtensionService.EXTRA_EVENT_CONTENT, "Some event content");
                intent.putExtras(extras);

                startService(intent);
            }
        });
    }
}

通知のために、 getSourceRegistrationConfigurations() を実装する必要があります

public class SampleRegistrationInformation extends RegistrationInformation {
    final Context mContext;

    protected SampleRegistrationInformation(Context context) {
        mContext = context;
    }

    @Override
    public int getRequiredNotificationApiVersion() {
        return 1;
    }

    @Override
    public ContentValues getExtensionRegistrationConfiguration() {
        <..>
    }

    @Override
    public ContentValues[] getSourceRegistrationConfigurations() {
        ContentValues sourceValues = new ContentValues();
        sourceValues.put(Notification.SourceColumns.ENABLED, true);
        sourceValues.put(Notification.SourceColumns.NAME, "Sample");
        sourceValues.put(Notification.SourceColumns.EXTENSION_SPECIFIC_ID, SampleExtensionService.EXTENSION_SPECIFIC_ID);
        sourceValues.put(Notification.SourceColumns.PACKAGE_NAME, mContext.getPackageName());
        return new ContentValues[]{sourceValues};
    }

}
于 2013-10-21T11:04:24.283 に答える