显示Facebook的像Android中的广播接收机聊天头 [英] Show facebook like chat head from a broadcast receiver in android

查看:147
本文介绍了显示Facebook的像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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆