显示Facebook的像Android中的广播接收机聊天头 [英] Show facebook like chat head from a broadcast receiver in android
问题描述
我下面本教程的实施像Facebook的聊天的头。当我从一个活动启动该服务,它只是正常工作。但是,当我从广播接收器开始,当我打开它,我shows.Can显示来自广播接收聊天头上的应用程序,而无需使用活动聊天头不showing.And? Actaully荫使用此功能就像一个来电显示窗口。因此,它会显示出来,当我接到一个电话。
这里是ChatHead服务,
公共类CallerIDService延伸服务{私人窗口管理器窗口管理;
私人ImageView的chatHead;
私人的RelativeLayout parentlayout;
私人RelativeLayout的边界;
按钮,关闭;
按钮添加;
INT imageid = 1;
INT borderid = 2;
INT NameID的= 3;
INT closeid = 4;
TextView的名称;
TextView的数量;
串numbertext;
串nametext;@覆盖
公众的IBinder onBind(意向意图){
// 不曾用过
返回null;
}@覆盖
公众诠释onStartCommand(意向意图,诠释标志诠释startId){
// TODO自动生成方法存根
束B = intent.getExtras(); numbertext = b.getString(数字);
nametext = b.getString(名称); name.setText(nametext);
number.setText(numbertext); Log.i(传入的服务,呼入服务+ numbertext
+ - + nametext); 返回super.onStartCommand(意向,旗帜,startId);
}@覆盖
公共无效的onCreate(){
super.onCreate(); 窗口管理=(窗口管理器)getSystemService(WINDOW_SERVICE); chatHead =新ImageView的(本);
关闭=新按钮(本);
添加=新按钮(本);
add.setText(保存);
close.setText(辞退);
close.setId(closeid); chatHead.setImageResource(R.drawable.ic_usericon); chatHead.setId(imageid); parentlayout =新的RelativeLayout(本);
边界=新的RelativeLayout(本);
border.setId(borderid); parentlayout.setBackgroundColor(Color.parseColor(#FFFFFF));
border.setBackgroundColor(Color.parseColor(#ff0c0c)); NAME =新的TextView(本); name.setTextColor(Color.parseColor(#494949));
name.setId(NameID的);
name.setTextSize(19); 数=新的TextView(本); number.setTextColor(Color.parseColor(#696969)); number.setTextSize(16); 最后WindowManager.LayoutParams PARAMS =新WindowManager.LayoutParams(
WindowManager.LayoutParams.FILL_PARENT,150,
WindowManager.LayoutParams.TYPE_SYSTEM_ALERT,
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
| WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL,
PixelFormat.TRANSLUCENT); params.gravity = Gravity.TOP | Gravity.LEFT;
params.x = 0;
params.y = 100; 最后RelativeLayout.LayoutParams params_imageview =新RelativeLayout.LayoutParams(
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.WRAP_CONTENT); params_imageview.addRule(RelativeLayout.ALIGN_PARENT_LEFT); 最后RelativeLayout.LayoutParams params_border =新RelativeLayout.LayoutParams(
WindowManager.LayoutParams.MATCH_PARENT,3); params_border.addRule(RelativeLayout.ALIGN_PARENT_TOP); 最后RelativeLayout.LayoutParams params_name =新RelativeLayout.LayoutParams(
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.WRAP_CONTENT); params_name.addRule(RelativeLayout.RIGHT_OF,imageid);
params_name.addRule(RelativeLayout.CENTER_VERTICAL); 最后RelativeLayout.LayoutParams params_number =新RelativeLayout.LayoutParams(
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.WRAP_CONTENT); params_number.addRule(RelativeLayout.RIGHT_OF,imageid);
params_number.addRule(RelativeLayout.BELOW,NameID的); 最后RelativeLayout.LayoutParams params_add =新RelativeLayout.LayoutParams(
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.WRAP_CONTENT); params_add.addRule(RelativeLayout.LEFT_OF,closeid);
params_add.addRule(RelativeLayout.CENTER_VERTICAL); 最后RelativeLayout.LayoutParams params_close =新RelativeLayout.LayoutParams(
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.WRAP_CONTENT); params_close.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
params_close.addRule(RelativeLayout.CENTER_VERTICAL); //机器人:layout_alignParentLeft =真
//机器人:layout_below =@ + ID / relativeLayout1 parentlayout.addView(chatHead,params_imageview); //将用户图像
//视图
parentlayout.addView(境,params_border); //添加顶部边框,查看
parentlayout.addView(姓名,params_name);
parentlayout.addView(数字,params_number);
parentlayout.addView(接近,params_close);
parentlayout.addView(添加,params_add); windowManager.addView(parentlayout,则params); close.setOnClickListener(新View.OnClickListener(){ @覆盖
公共无效的onClick(查看为arg0){
// TODO自动生成方法存根
stopSelf(); }
}); add.setOnClickListener(新View.OnClickListener(){ @覆盖
公共无效的onClick(查看为arg0){
// TODO自动生成方法存根
的addContact(numbertext,nametext);
add.setVisibility(View.GONE); }
});}@覆盖
公共无效的onDestroy(){
super.onDestroy();
如果(parentlayout!= NULL)
windowManager.removeView(parentlayout);
}
}
在我广播接收机的方法的onReceive我使用显示聊天头,
意向来电显示=新意图(
的背景下,
CallerIDService.class);
callerid.putExtra(姓名,巴瑟姆);
callerid.putExtra(号码,123456);
context.startService(来电显示);
你有没有加入以下权限?
<使用许可权的android:NAME =android.permission.SYSTEM_ALERT_WINDOW/>
I am following this tutorial to implement facebook like chat head. When I start the service from an activity it just work fine. But when I start it from a broadcast receiver the chat head is not showing.And when I open the app it shows.Can I show the chat head from a broadcast receiver, without using an activity? Actaully Iam using this feature like a callerid window. So that it will show up when I receive a call. Here is ChatHead service,
public class CallerIDService extends Service {
private WindowManager windowManager;
private ImageView chatHead;
private RelativeLayout parentlayout;
private RelativeLayout border;
Button close;
Button add;
int imageid = 1;
int borderid = 2;
int nameid = 3;
int closeid = 4;
TextView name;
TextView number;
String numbertext;
String nametext;
@Override
public IBinder onBind(Intent intent) {
// Not used
return null;
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
// TODO Auto-generated method stub
Bundle b = intent.getExtras();
numbertext = b.getString("number");
nametext = b.getString("name");
name.setText(nametext);
number.setText(numbertext);
Log.i("Incoming in service ", "Incoming in service " + numbertext
+ "--" + nametext);
return super.onStartCommand(intent, flags, startId);
}
@Override
public void onCreate() {
super.onCreate();
windowManager = (WindowManager) getSystemService(WINDOW_SERVICE);
chatHead = new ImageView(this);
close = new Button(this);
add = new Button(this);
add.setText("Save");
close.setText("Dismiss");
close.setId(closeid);
chatHead.setImageResource(R.drawable.ic_usericon);
chatHead.setId(imageid);
parentlayout = new RelativeLayout(this);
border = new RelativeLayout(this);
border.setId(borderid);
parentlayout.setBackgroundColor(Color.parseColor("#ffffff"));
border.setBackgroundColor(Color.parseColor("#ff0c0c"));
name = new TextView(this);
name.setTextColor(Color.parseColor("#494949"));
name.setId(nameid);
name.setTextSize(19);
number = new TextView(this);
number.setTextColor(Color.parseColor("#696969"));
number.setTextSize(16);
final WindowManager.LayoutParams params = new WindowManager.LayoutParams(
WindowManager.LayoutParams.FILL_PARENT, 150,
WindowManager.LayoutParams.TYPE_SYSTEM_ALERT,
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
| WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL,
PixelFormat.TRANSLUCENT);
params.gravity = Gravity.TOP | Gravity.LEFT;
params.x = 0;
params.y = 100;
final RelativeLayout.LayoutParams params_imageview = new RelativeLayout.LayoutParams(
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.WRAP_CONTENT);
params_imageview.addRule(RelativeLayout.ALIGN_PARENT_LEFT);
final RelativeLayout.LayoutParams params_border = new RelativeLayout.LayoutParams(
WindowManager.LayoutParams.MATCH_PARENT, 3);
params_border.addRule(RelativeLayout.ALIGN_PARENT_TOP);
final RelativeLayout.LayoutParams params_name = new RelativeLayout.LayoutParams(
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.WRAP_CONTENT);
params_name.addRule(RelativeLayout.RIGHT_OF, imageid);
params_name.addRule(RelativeLayout.CENTER_VERTICAL);
final RelativeLayout.LayoutParams params_number = new RelativeLayout.LayoutParams(
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.WRAP_CONTENT);
params_number.addRule(RelativeLayout.RIGHT_OF, imageid);
params_number.addRule(RelativeLayout.BELOW, nameid);
final RelativeLayout.LayoutParams params_add = new RelativeLayout.LayoutParams(
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.WRAP_CONTENT);
params_add.addRule(RelativeLayout.LEFT_OF, closeid);
params_add.addRule(RelativeLayout.CENTER_VERTICAL);
final RelativeLayout.LayoutParams params_close = new RelativeLayout.LayoutParams(
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.WRAP_CONTENT);
params_close.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
params_close.addRule(RelativeLayout.CENTER_VERTICAL);
// android:layout_alignParentLeft="true"
// android:layout_below="@+id/relativeLayout1"
parentlayout.addView(chatHead, params_imageview);// adding user image to
// view
parentlayout.addView(border, params_border);// adding top border to view
parentlayout.addView(name, params_name);
parentlayout.addView(number, params_number);
parentlayout.addView(close, params_close);
parentlayout.addView(add, params_add);
windowManager.addView(parentlayout, params);
close.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
stopSelf();
}
});
add.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
addcontact(numbertext, nametext);
add.setVisibility(View.GONE);
}
});
}
@Override
public void onDestroy() {
super.onDestroy();
if (parentlayout != null)
windowManager.removeView(parentlayout);
}
}
And in onReceive method of my broadcast receiver I am showing the chat head using,
Intent callerid = new Intent(
context,
CallerIDService.class);
callerid.putExtra("name", "basim");
callerid.putExtra("number", "123456");
context.startService(callerid);
Have you added following permission?
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
这篇关于显示Facebook的像Android中的广播接收机聊天头的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!