2013-04-25 98 views
-1

我想开发一个android服务,知道是否有任何通知,然后采取行动。我不知道如何管理通知。
我想知道通知如何工作,以及如何倾听他们。如何通过服务处理通知?

+0

什么y你的意思是“听通知”?你的意思是你想要某种服务以某种方式读取通知并对其采取行动? – ravemir 2013-04-25 18:23:37

+0

另外,你知道你想采取哪些通知吗?也许有一种解决方法可以更好地满足您的需求,您可能不得不使用繁琐的可访问性服务并要求用户使用它,这一直是可疑的。 – ravemir 2013-04-25 18:26:18

+0

Alread阅读这个或你的意思是什么样的通知? https://developer.android.com/guide/topics/ui/notifiers/notifications.html – luxer 2013-04-25 18:27:34

回答

0

this answer中所述,您应该使用BroadcastReceiver捕获适当的意图并执行您的预期操作。

你提到的一个例子是,接收短信应触发LED指示灯。如前所述here,你应该注册你的 'SMSReceiver' 广播接收器,像这样:

// 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的问题,大多数报道似乎粗略,但this answer有一个躲闪避难所变通办法:

android.provider.Settings.System.putInt(context.getContentResolver(), 
    "notification_light_pulse", on ? 1 : 0);