- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在这里,我试图为来电显示一个Dialog
,当我在一个 Activity 中实现时它工作正常,但我想在后台服务中实现,这样我就可以随时接到电话电话。我将 Service
用于后台进程,但由于某些方法,我没有获得适当的成功。当我在 Service 中实现时,我总是在同一行出错,但在 Activity 中永远不会出错。
我从 BROADCASTRECEIVER 开始这个服务
public class BReciever extends BroadcastReceiver {
Context context;
@Override
public void onReceive(Context con, Intent intent) {
this.context = con;
intent = new Intent(context, PingService.class);
context.startService(intent);
intent = new Intent(context, IncomingCallService.class);
intent.putExtra("operator_id", "12");
context.startService(intent);
}
}
我得到错误的方法是
public boolean handleIncomingIntent(Intent intent) {
Device inDevice = intent.getParcelableExtra(Device.EXTRA_DEVICE);
Connection inConnection = intent
.getParcelableExtra(Device.EXTRA_CONNECTION);
if (inDevice == null && inConnection == null)
return false;
intent.removeExtra(Device.EXTRA_DEVICE);
intent.removeExtra(Device.EXTRA_CONNECTION);
if (pendingIncomingConnection != null) {
Log.i(TAG, "A pending connection already exists");
inConnection.ignore();
return false;
}
pendingIncomingConnection = inConnection;
pendingIncomingConnection.setConnectionListener(this);
return true;
}
当我通过 Service
调用此方法时,我总是在 Device
和 Connection
中得到 null。
服务等级
public class IncomingCallService extends Service implements LoginListener,
BasicConnectionListener, BasicDeviceListener, View.OnClickListener,
CompoundButton.OnCheckedChangeListener,
RadioGroup.OnCheckedChangeListener {
private static Handler handler;
public BasicPhone phone;
BasicPhoneActivity call_screen;
SharedPreferences login_details;
Vibrator vibrator;
Ringtone r;
private AlertDialog incomingAlert;
Uri notification;
public static final String LOGIN_DETAILS = "u18_sales_logins_details";
AudioManager am;
Intent intent;
static String Twilio_id = "",
INCOMING_AUTH_PHP_SCRIPT = "http://example.com/client_generate_token?users_id=";
Runnable newrun;
Activity context;
Context ctx;
@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
return null;
}
@Override
public void onCreate() {
login_details = getSharedPreferences(LOGIN_DETAILS,
Context.MODE_PRIVATE);
if (login_details.contains("twilio_Id")) {
Twilio_id = login_details.getString("twilio_Id", "");
}
phone = BasicPhone.getInstance(getApplicationContext());
phone.setListeners(this, this, this);
new IncomingTokenTask().execute();
onCallHandler();
Log.d("toekn", BasicPhone.capabilityToken);
}
@Override
public void onDestroy() {
super.onDestroy();
if (phone != null) {
phone.setListeners(null, null, null);
phone = null;
}
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
// TODO Auto-generated method stub
op_id = (String) intent.getExtras().get("operator_id");
if (null != intent) {
if (phone.handleIncomingIntent(intent)) {
showIncomingAlert();
}
}
return START_STICKY;
}
private void showIncomingAlert() {
handler.post(new Runnable() {
@Override
public void run() {
if (incomingAlert == null) {
notification = RingtoneManager
.getDefaultUri(RingtoneManager.TYPE_RINGTONE);
r = RingtoneManager.getRingtone(getApplicationContext(),
notification);
am = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
switch (am.getRingerMode()) {
case AudioManager.RINGER_MODE_SILENT:
r.play();
break;
case AudioManager.RINGER_MODE_VIBRATE:
long pattern[] = { 0, 500, 200, 300, 500 };
vibrator.vibrate(pattern, 0);
break;
case AudioManager.RINGER_MODE_NORMAL:
r.play();
break;
}
incomingAlert = new AlertDialog.Builder(
getApplicationContext())
.setTitle(R.string.incoming_call)
.setCancelable(false)
.setMessage(R.string.incoming_call_message)
.setPositiveButton(R.string.answer,
new DialogInterface.OnClickListener() {
@Override
public void onClick(
DialogInterface dialog,
int which) {
switch (am.getRingerMode()) {
case AudioManager.RINGER_MODE_SILENT:
r.stop();
break;
case AudioManager.RINGER_MODE_VIBRATE:
vibrator.cancel();
break;
case AudioManager.RINGER_MODE_NORMAL:
r.stop();
break;
}
phone.acceptConnection();
incomingAlert = null;
}
})
.setNegativeButton(R.string.ignore,
new DialogInterface.OnClickListener() {
@Override
public void onClick(
DialogInterface dialog,
int which) {
switch (am.getRingerMode()) {
case AudioManager.RINGER_MODE_SILENT:
r.stop();
break;
case AudioManager.RINGER_MODE_VIBRATE:
vibrator.cancel();
break;
case AudioManager.RINGER_MODE_NORMAL:
r.stop();
break;
}
phone.ignoreIncomingConnection();
incomingAlert = null;
}
})
.setOnCancelListener(
new DialogInterface.OnCancelListener() {
@Override
public void onCancel(
DialogInterface dialog) {
phone.ignoreIncomingConnection();
}
}).create();
incomingAlert.show();
}
}
});
}
private void hideIncomingAlert() {
handler.post(new Runnable() {
@Override
public void run() {
if (incomingAlert != null) {
incomingAlert.dismiss();
incomingAlert = null;
}
}
});
}
public void onCallHandler() {
// TODO Auto-generated method stub
handler = new Handler();
newrun = new Runnable() {
@Override
public void run() {
handler.removeCallbacks(newrun);
new IncomingTokenTask().execute();
if (null != intent) {
if (phone.handleIncomingIntent(intent)) {
showIncomingAlert();
}
}
handler.postDelayed(this, 200000);
}
};
handler.postDelayed(newrun, 80000);
}
class IncomingTokenTask extends AsyncTask<Void, Void, Void> {
String message;
JSONObject jsonResponse;
int crash_app;
@Override
protected void onPreExecute() {
}
@Override
protected Void doInBackground(Void... params) {
HostnameVerifier hostnameVerifier = org.apache.http.conn.ssl.SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER;
DefaultHttpClient httpclient = new DefaultHttpClient();
SchemeRegistry registry = new SchemeRegistry();
SSLSocketFactory socketFactory = SSLSocketFactory
.getSocketFactory();
socketFactory
.setHostnameVerifier((X509HostnameVerifier) hostnameVerifier);
registry.register(new Scheme("https", socketFactory, 443));
SingleClientConnManager mgr = new SingleClientConnManager(
httpclient.getParams(), registry);
@SuppressWarnings("unused")
DefaultHttpClient httpClient = new DefaultHttpClient(mgr,
httpclient.getParams());
// Set verifier
HttpsURLConnection.setDefaultHostnameVerifier(hostnameVerifier);// Create
// new
// HTTP
// POST
// with
// URL
// to
// php
// file
// as
// parameter
HttpGet httppost = new HttpGet(INCOMING_AUTH_PHP_SCRIPT + Twilio_id);
try {
HttpResponse response = httpclient.execute(httppost);
if (response.getStatusLine().getStatusCode() == 200) {
HttpEntity entity = response.getEntity();
if (entity != null) {
BasicPhone.capabilityToken = EntityUtils
.toString(entity);
BasicPhone.decodedString = BasicPhone.capabilityToken
.replace("\"", "");
}
}
} catch (Exception e) {
crash_app = 5;
message = "Something went wrong. Please try again later.";
return null;
}
return null;
}
@Override
protected void onPostExecute(Void result) {
}
}
@Override
public void onCheckedChanged(RadioGroup arg0, int arg1) {
// TODO Auto-generated method stub
}
@Override
public void onCheckedChanged(CompoundButton arg0, boolean arg1) {
// TODO Auto-generated method stub
}
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
}
@Override
public void onDeviceStartedListening() {
// TODO Auto-generated method stub
}
@Override
public void onDeviceStoppedListening(Exception error) {
// TODO Auto-generated method stub
}
@Override
public void onIncomingConnectionDisconnected() {
hideIncomingAlert();
}
@Override
public void onConnectionConnecting() {
// TODO Auto-generated method stub
}
@Override
public void onConnectionConnected() {
// TODO Auto-generated method stub
}
@Override
public void onConnectionFailedConnecting(Exception error) {
// TODO Auto-generated method stub
}
@Override
public void onConnectionDisconnecting() {
// TODO Auto-generated method stub
}
@Override
public void onConnectionDisconnected() {
// TODO Auto-generated method stub
}
@Override
public void onConnectionFailed(Exception error) {
// TODO Auto-generated method stub
}
@Override
public void onLoginStarted() {
// TODO Auto-generated method stub
}
@Override
public void onLoginFinished() {
// TODO Auto-generated method stub
}
@Override
public void onLoginError(Exception error) {
// TODO Auto-generated method stub
}
}
而 logcat 是
07-16 00:12:56.305: E/AndroidRuntime(1104): FATAL EXCEPTION: main
07-16 00:12:56.305: E/AndroidRuntime(1104): Process: com.u18.enroll, PID: 1104
07-16 00:12:56.305: E/AndroidRuntime(1104): java.lang.NullPointerException
07-16 00:12:56.305: E/AndroidRuntime(1104): at com.u18.enroll.BasicPhone.handleIncomingIntent(BasicPhone.java:290)
07-16 00:12:56.305: E/AndroidRuntime(1104): at com.u18.enroll.IncomingCallService$3.run(IncomingCallService.java:217)
07-16 00:12:56.305: E/AndroidRuntime(1104): at android.os.Handler.handleCallback(Handler.java:733)
07-16 00:12:56.305: E/AndroidRuntime(1104): at android.os.Handler.dispatchMessage(Handler.java:95)
07-16 00:12:56.305: E/AndroidRuntime(1104): at android.os.Looper.loop(Looper.java:136)
07-16 00:12:56.305: E/AndroidRuntime(1104): at android.app.ActivityThread.main(ActivityThread.java:5017)
07-16 00:12:56.305: E/AndroidRuntime(1104): at java.lang.reflect.Method.invokeNative(Native Method)
07-16 00:12:56.305: E/AndroidRuntime(1104): at java.lang.reflect.Method.invoke(Method.java:515)
07-16 00:12:56.305: E/AndroidRuntime(1104): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
07-16 00:12:56.305: E/AndroidRuntime(1104): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
07-16 00:12:56.305: E/AndroidRuntime(1104): at dalvik.system.NativeStart.main(Native Method)
我总是在第一个条件下出错。谁能帮我解决一下?
最佳答案
I always get null in Device and Connection when I call this method via Service.
当然。这是您在 IncomingCallService
上调用 startService()
的代码:
intent = new Intent(context, IncomingCallService.class);
context.startService(intent);
您会注意到您没有在此 Intent
上放置任何额外内容。因此,当您尝试将它们从 onStartCommand()
中交付给服务的 Intent
中拉出时,将不会有额外的内容。如果您希望在此 Intent
上添加额外内容,您需要输入 putExtra()
调用来执行此操作。
关于android - 将 Twilio 的传入调用代码从 Activity 实现到服务类中,但每次都会出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31376053/
这个问题已经有答案了: 已关闭10 年前。 Possible Duplicate: How do I copy an object in Java? 我的类中有一个函数 Claus它调用一个函数来接受
任何人都可以给我一个 linux 内核驱动程序手册或示例的链接,它可以修改来自/到指定 ip 端口的传入/传出数据包吗? 谢谢! 最佳答案 Kprobes 是一种可以做到这一点的方法。这是一个使用具有
我有一个 3rd 方网站,该网站具有发送到特定 url 的 webhook。我将其设置为发送到我网站上的空白页面(例如:www.mysite.com/webhook.php) 我在 webhook.p
我对传递的约定感到困惑*args在 super().__init__()在python继承中。 我了解需要使用关键字参数 **kwargs因此,如果需要,CRO 中的类可以采用所需的参数,但为什么还有
我有一个 webapi (.NET core 3.1) 方法,它正在获取 XML 并反序列化为对象。但是一些标签的开头和结尾是不一样的。例如,如果以 打开然后它以 关闭.因此 XML 格式不正确。
是否有一个 hg 命令可以组合 hg传入 + hg传出 + hg status? 这会告诉您是否有任何远程内容需要传入,是否有任何本地提交的内容需要出去,或者是否有任何本地更改需要提交。 最佳答案 虽
据我了解,你无法在两部 iPhone 之间建立连接(如果我错了,请纠正我)。因此,我想做的是在客户端应用程序之间放置一台服务器,该服务器接受消息并将其重新分发给适当的人员。本质上,该应用程序将允许人们
我正在使用 Apache Camel 向我的 Java 服务发送消息。我在消费者路线上保留了 transacted=true。我还需要发送有关成功处理 JMS 消息的电子邮件。 我正在使用以下代码来注
这个问题在这里已经有了答案: What does "this" point to? (5 个答案) 关闭 4 年前。 public class CommandForm extends Form im
我是一名 Swift 开发人员,也是 Dart 的新手。我正在尝试编写一些通用方法。 我想知道我是否可以在 Dart 中实现类似的事情。 //Swift version public func mod
基本上有人问我是否有任何方法可以捕获和下载通过邮件服务器的所有传入和传出电子邮件(最好是文本格式)。这种下载方法需要使用PHP或类似的服务器端语言来完成。 如果我能通过上述阶段,那么最终目标就很容易实
我正在学习 Flask 并且有一个关于动态路由的问题:是否可以传入一个可接受的路由列表?我注意到 any 转换器有潜力,但很难找到它的使用示例。基本上我有不同的端点组,它们应该在它们之间触发相同的 A
我正在学习如何使用 pthread 函数。在这里我想使用 pthread_create 创建一个线程并用它计算一些数字的平均值。(数字序列末尾的0表示已经完成) 这是我到目前为止写的: #includ
我需要传递一个带有字段“nombre”作为参数的条件 目前我这样做: @xcondicion= {:nombre.like => "%#{params[:qyBusqueda]}%"} cliente
我有以下两个 parseInt(),我不太清楚为什么它们会给我不同的结果: alert(parseInt(0.00001)) 显示 0; alert(parseInt(0.00000001)) 显示
我有一个使用 SODA 包来操作 JSON 数据库的 PL/SQL 处理程序。我想: 读取有效负载中键 id 的值 将负载 JSON 写入数据库中的新文档。 要执行第 1 步,处理程序将 :body
我正在使用 Oracle 试用 Dapper,我试图运行多结果集查询,但 Oracle 需要 dbtype 的 refcursor。 StringBuilder query = new StringB
我在将“工作表”选项卡重命名为任何文件名时遇到问题。这样做的问题是,如果用户意外下载工作表两次,Windows 会将 template(1).csv 附加到文件中,以保持其下载目录中的唯一性。在 Ex
我将 id 作为字符串传递到函数中。我想使用该 ID 来更改背景颜色。我用过: $("#"+address).css("background-color", "#3399FF"); 但它没有改变背景颜
我有一个 ListSourceAdapter.java 类, class ListSourceViewHolder extends RecyclerView.ViewHolder implements
我是一名优秀的程序员,十分优秀!