-1

通知があるかどうかを認識してアクションを実行するAndroidサービスを開発しようとしています。通知の管理方法がわかりません。
通知がどのように機能するか、およびそれらをリッスンする方法を知りたいです。

4

1 に答える 1

0

この回答で述べたように、BroadcastReceiver を使用して適切なインテントをキャプチャし、意図したアクションを実行する必要があります。

例として、SMS メッセージを受信すると LED ライトが点灯する必要があると述べました。hereで述べたように、「SMSReceiver」BroadcastReceiver を次のように登録する必要があります。

// SMS Receiver
<receiver android:name="com.myexample.receivers.SMSReceiver" >
    <intent-filter>
        <action android:name="android.provider.Telephony.SMS_RECEIVED" />
    </intent-filter>
</receiver>

...そしてそのコードを次のように定義します。

public class SMSReceiver extends BroadcastReceiver {
private final String DEBUG_TAG = getClass().getSimpleName().toString();
private static final String ACTION_SMS_RECEIVED = "android.provider.Telephony.SMS_RECEIVED";
private Context mContext;
private Intent mIntent;

// Retrieve SMS
public void onReceive(Context context, Intent intent) {
    mContext = context;
    mIntent = intent;

    String action = intent.getAction();

    if(action.equals(ACTION_SMS_RECEIVED)){

        String address, str = "";
        int contactId = -1;

        SmsMessage[] msgs = getMessagesFromIntent(mIntent);

        // Iterate over the received messages with a loop,
        // performing the desired actions during the process
    }

}

public static SmsMessage[] getMessagesFromIntent(Intent intent) {
    Object[] messages = (Object[]) intent.getSerializableExtra("pdus");
    byte[][] pduObjs = new byte[messages.length][];

    for (int i = 0; i < messages.length; i++) {
        pduObjs[i] = (byte[]) messages[i];
    }
    byte[][] pdus = new byte[pduObjs.length][];
    int pduCount = pdus.length;
    SmsMessage[] msgs = new SmsMessage[pduCount];
    for (int i = 0; i < pduCount; i++) {
        pdus[i] = pduObjs[i];
        msgs[i] = SmsMessage.createFromPdu(pdus[i]);
    }
    return msgs;
}

}

...LEDの問題に関しては、ほとんどのレポートは大ざっぱに見えますが、この回答には危険な回避策があります:

android.provider.Settings.System.putInt(context.getContentResolver(),
    "notification_light_pulse", on ? 1 : 0);
于 2013-04-25T18:57:04.147 に答える