我在Android中创建简单通知,当新输入数据在设备中显示通知时,此通知始终检查来自服务器的数据,我使用intentservice
并设置androidManifest但在新数据输入时仍然不显示通知从服务器,这是我的代码:
类通知//在后台获取通知
public class Notification extends IntentService {
private UrlHelper Url = new UrlHelper();
private JSONParser jsonParser = new JSONParser();
public Notification() {
super(Notification.class.getName());
}
@Override
protected void onHandleIntent(Intent intent) {
new Notif().start();}
private class Notif extends Thread{
@Override
public void run() {
try {
while (true){
Thread.sleep(3000);
String jsonStr = new String();
List<NameValuePair> params = new ArrayList<NameValuePair>();
if(UserData.update_id==null){UserData.update_id= 0;}
jsonStr = jsonParser.makeHttpRequest(Url.updatesUrl(UserData.update_id), "GET", params);
try {
JSONObject json = new JSONObject(jsonStr);
JSONArray data = json.getJSONArray("otg");
Log.d("cek", UserData.cek + "");
for(int i=0;i<data.length();i++) {
JSONObject otg = data.getJSONObject(i);
String ID = otg.getString("id");
String desc = otg.getString("Desc");
String type = otg.getString("Category");
UserData.update_id = Integer.parseInt(ID);
if (UserData.cek!=null){
fireNotif(type+"-"+desc);
}else{}}
UserData.cek = UserData.update_id;
} catch (Exception e) {
e.printStackTrace();
}}
} catch (InterruptedException e) {e.printStackTrace();
}}}
}
AndroidManifest
答案 0 :(得分:1)
好的,您刚刚在AndroidManifest.xml中声明了您的服务,这没关系,但您也需要启动此服务。
在onCreate()方法的Activity中,您可以启动此服务:
div {
width: 200px;
height:50px;
margin: 20px;
position:relative;
}
div:before {
content: "";
display:block;
background: red;
position:absolute;
width:100%;
height:100%;
z-index:-1;
-webkit-transform: skew(-20deg);
-moz-transform: skew(-20deg);
-o-transform: skew(-20deg);
transform: skew(-20deg);
}
2'问题是 - IntentService现场很短 - 即startService(new Intent(this, Notif.class));
工作直到IntentService
方法完成。
在您的情况下,您的服务只能工作几毫秒,因为您创建了新的Thread并且handleMethod已完成。
我的主张是:不要创建新的线程。 IntentService为您创建新线程,您不需要创建新线程。将所有逻辑放在handleIntent()
方法