我正在关注此link
甚至添加了广播接收器,如上面的链接所示。但我没有通知完成任务,我想在完成此Intent服务后运行一些活动。 任何人都可以帮助我。
我收到的错误如下:
Permission Denial: broadcasting Intent
{ act=com.saaranga.services.GetTaxonomy.DATA_RETRIEVED
cat=[android.intent.category.DEFAULT] (has extras) }
from com.saaranga.lib (pid=1089, uid=10034)
equires com.saaranga.services.Permissions.SEND_SIMPLE_NOTIFICATIONS
due to receiver com.saaranga.lib/com.saaranga.services.ServiceReciver
在intentService中我初始化了:
public static final String ACTION_NOTIFY="com.saaranga.services.GetTaxonomy.DATA_RETRIEVED";
private void sendSimpleBroadcast(int count)
{
Intent broadcastIntent = new Intent();
broadcastIntent.setAction(GetTaxonomy.ACTION_NOTIFY);
broadcastIntent.addCategory(Intent.CATEGORY_DEFAULT);
broadcastIntent.putExtra(PARAM_OUT_COUNT, count);
// broadcastIntent.setClass(getApplicationContext(), getClass());
sendBroadcast(broadcastIntent, Permissions.SEND_SIMPLE_NOTIFICATIONS);
}
并创建了一个权限类:
package com.saaranga.services;
public class Permissions {
public static final String SEND_SIMPLE_NOTIFICATIONS = "com.saaranga.services.Permissions.SEND_SIMPLE_NOTIFICATIONS";}
在清单文件中:
<permission
android:name="com.saaranga.services.Permissions.SEND_SIMPLE_NOTIFICATIONS"
android:label="permission to send simple notifications"
android:permissionGroup="android.permission-group.PERSONAL_INFO"
android:protectionLevel="normal" />
<service
android:name="com.saaranga.services.GetTaxonomy"
android:enabled="true"
android:exported="true">
</service>
<receiver android:name="com.saaranga.services.ServiceReciver"
android:exported="true"
android:permission="com.saaranga.services.Permissions.SEND_SIMPLE_NOTIFICATIONS">
<intent-filter>
<action android:name="com.saaranga.services.GetTaxonomy.DATA_RETRIEVED"/>
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</receiver>
甚至在上面的链接中添加了Broadcast reciver。但我没有通知完成任务,我想在完成此Intent服务后运行一些活动。 任何人都可以帮助我。
答案 0 :(得分:3)
第1步:
在MainActivity.class中
private ResponseReceiver receiver;
//register reciver
IntentFilter filter = new IntentFilter(ResponseReceiver.ACTION_RESP);
filter.addCategory(Intent.CATEGORY_DEFAULT);
receiver = new ResponseReceiver();
registerReceiver(receiver, filter);
第2步: MainActivity.class中的子类,它扩展了BroadcastReceiver。
public class ResponseReceiver extends BroadcastReceiver {
public static final String ACTION_RESP = "com.saaranga.intent.action.MESSAGE_PROCESSED";
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(getApplicationContext(), "download complete", Toast.LENGTH_SHORT).show();
}
}
第3步: 在IntentService中:
@Override
protected void onHandleIntent(Intent intent) {
Intent broadcastIntent = new Intent();
broadcastIntent.setAction(ResponseReceiver.ACTION_RESP);
broadcastIntent.addCategory(Intent.CATEGORY_DEFAULT);
sendBroadcast(broadcastIntent);
}
这段代码对我来说很好。 欢呼声。
答案 1 :(得分:1)
在我的主要活动中,我已经定义了一个状态标志
private final Handler LoginHandler = new Handler() {
@Override
public void handleMessage(Message loginmessage) {
Bundle receivedData = loginmessage.getData();
loginStatus = receivedData.getString("status");
if(loginStatus.equals("done")){
//do something
}else{
//do something
}
};
};
在意图服务中,如果工作完成,我发送了一个值'done',如果有任何错误,我发送'connectionerror'
try {
if (LoginBundle != null) {
Messenger LoginMessenger = (Messenger) LoginBundle
.get("LOGINMESSENGER");
Message LoginMessage = Message.obtain();
LoginBundle.putString("status", "Done");
try {
LoginMessenger.send(LoginMessage);
}
catch (android.os.RemoteException e1) {
Log.w("Message Not Sent", e1);
}
}
} catch (JSONException e) {
Bundle LoginBundle = intent.getExtras();
Message LoginMessage = Message.obtain();
Messenger LoginMessenger = (Messenger) LoginBundle
.get("LOGINMESSENGER");
LoginBundle.putString("status", "Connection Error");
LoginMessage.setData(LoginBundle);
try {
LoginMessenger.send(LoginMessage);
}
catch (android.os.RemoteException e1) {
Log.w("Message Not Sent", e1);
}
} catch (Exception ex) {
Log.w("Unhandled", ex);
}
所以在主要行为中,如果我得到任何回复,我可以检测到意图服务已完成其工作。
希望您了解我确定服务状态的方式。