加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

Android 后台自动拨打电话

(2015-05-19 16:14:44)
分类: android
http://www.eoeandroid.com/static/image/common/online_member.gif后台自动拨打电话" TITLE="Android 后台自动拨打电话" /> 发表于 2014-3-4 13:37:28 | 只看该作者 |只看大图 http://www.eoeandroid.com/static/image/common/arw_r.gif后台自动拨打电话" />
最近找工作面试,其中一些面试官的想法,闲来无事做成demo分享给大家http://www.eoeandroid.com/static/image/smiley/tutu/3.gif后台自动拨打电话" />
这次面试官想实现一个自动电话拨打的功能,查了下资料发现想不出现手机的拨号界面貌似不怎么现实,如果有实现这项功能的大神能够提点提点在下~http://www.eoeandroid.com/static/image/smiley/tutu/78.gif后台自动拨打电话" />
上效果图,简单大神勿喷~~~
http://a1.eoeandroid.com/attachment/forum/201403/04/133025velzvm576m5alrrf.png后台自动拨打电话" TITLE="Android 后台自动拨打电话" /> 

http://a1.eoeandroid.com/attachment/forum/201403/04/133059hzt3g6g6g0taglks.png后台自动拨打电话" TITLE="Android 后台自动拨打电话" /> 

http://a1.eoeandroid.com/attachment/forum/201403/04/133140wwja5z0wa0z50w00.png后台自动拨打电话" TITLE="Android 后台自动拨打电话" /> 

http://a1.eoeandroid.com/attachment/forum/201403/04/133158yuoh0la0vzozhnxn.png后台自动拨打电话" TITLE="Android 后台自动拨打电话" /> 

不废话,代码奉上
MainActivity.java
[mw_shl_code=java,true]package com.example.autophone;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Timer;
import java.util.TimerTask;

import android.app.Activity;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.ServiceConnection;
import android.os.Bundle;
import android.os.Handler;
import android.os.IBinder;
import android.os.Message;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ProgressBar;
import android.widget.TextView;

import com.example.service.AutoPhoneService;
import com.example.service.AutoPhoneService.AutoPhoneBinder;
import com.example.util.AutoPhoneUtil;

public class MainActivity extends Activity {
        public AutoPhoneService mAutoPhoneService;
        public MainActivity mMainActivity;
        public boolean isServiceConnent = false;
        public TextView tv1;
        public Button btn1;
        public ProgressBar pb1 , pb2;
        public static final int mRefresh = 1;
        public static final int mStart = 2;
        public static final int mEnd = 3;
        public static final int mIntend = 4;
        public static final int mFinish = 5;
        public Handler mRefresh_Handler = null;
        public Handler mHandler1 = null;
        public Runnable mRunnbale;
        public Timer mTimer;
        public TimerTask mTimerTask;
        public ArrayList> mArrayList;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_main);
                mMainActivity = this;
                onStartService();
                
        //        onStartService();
        
                initView();
                onIntend();
        }
         
       
        private void initView(){
                tv1 = (TextView) findViewById(R.id.textView1);
                btn1 = (Button) findViewById(R.id.button1);
                pb1 = (ProgressBar) findViewById(R.id.progressBar1);
                pb2 = (ProgressBar) findViewById(R.id.progressBar2);
                tv1.setVisibility(View.GONE);
                pb1.setVisibility(View.GONE);
                pb2.setVisibility(View.GONE);
                btn1.setOnClickListener(new mButtonListener());
        }

        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
                // Inflate the menu; this adds items to the action bar if it is present.
                getMenuInflater().inflate(R.menu.main, menu);
                return true;
        }
        
        
        
        class mButtonListener implements OnClickListener{

                @Override
                public void onClick(View v) {
                        // TODO Auto-generated method stub
                        switch(v.getId()){
                        //开始按钮
                        case R.id.button1:
                                mHandler.sendEmptyMessage(mStart);
                                if(mTimer == null){
                                        mTimer = new Timer();
                                        mTimerTask = new TimerTask() {
                                                
                                                @Override
                                                public void run() {
                                                        // TODO Auto-generated method stub
                                                        //刷新消息
                                                        mHandler.sendEmptyMessage(mRefresh);
                                                }
                                        };
                                        //循环刷新
                                        mTimer.schedule(mTimerTask, 10,2000);
                                }
                                break;
                                
                        }
                }
                
        }
        
       
        public Handler mHandler = new Handler(){
               
                @Override
                public void handleMessage(Message msg) {
                        // TODO Auto-generated method stub
                        
                        switch(msg.what){
                                //刷新进度
                        case mRefresh:
                                tv1.setText(mAutoPhoneService.getmUserName()+" : "+mAutoPhoneService.getmNumber());
                                pb2.setProgress(mAutoPhoneService.getmProgress());
                                if(pb2.isEnabled()){
                                        CancelTimer();
                                        mHandler.sendEmptyMessage(mEnd);
                                }
                                break;
                                //开始任务
                        case mStart:
                                pb2.setVisibility(View.VISIBLE);
                                tv1.setVisibility(View.VISIBLE);
                                pb2.setMax(mAutoPhoneService.getmArrayList().size()-1);
                                mAutoPhoneService.CallNumber();
                                break;
                                //结束任务
                        case mEnd:
                                pb1.setVisibility(View.GONE);
                                pb2.setVisibility(View.GONE);
                                tv1.setText("任务进行完毕");
                                CancelTimer();
                                break;
                        case mIntend:
                                btn1.setClickable(false);
                                pb1.setVisibility(View.VISIBLE);
                                tv1.setVisibility(View.VISIBLE);
                                tv1.setText("正在准备数据");
                                break;
                        case mFinish:
                                btn1.setClickable(true);
                                pb1.setVisibility(View.GONE);
                                tv1.setText("数据准备完成");
                                break;
                                
                        }
                        super.handleMessage(msg);
                }
                
        };
        
       
        public void onStartService(){
                Intent mIntent = new Intent(mMainActivity , AutoPhoneService.class);
                boolean isf=bindService(mIntent, mConnection, Context.BIND_AUTO_CREATE);
                System.out.println("isf===" + isf+"===="+mConnection);
        }
        
        @Override
        protected void onStart() {
                // TODO Auto-generated method stub
                super.onStart();
                
                
        }
        
       
        public void onIntend(){
                mHandler.sendEmptyMessage(mIntend);
                mArrayList = new ArrayList>();
                for(int i = 0 ; i < 15 ; i++){
                        HashMap mHashMap = new HashMap();
                        mHashMap.put(AutoPhoneUtil.phoneNumber, "188888888"+i);
                        mHashMap.put(AutoPhoneUtil.userName, "张三"+i);
                        mArrayList.add(mHashMap); 
                }
                if(mHandler1 == null){
                        mHandler1 = new Handler();
                }
                        mHandler1.postDelayed(new Runnable(){

                               
                                @Override
                                public void run() {
                                        // TODO Auto-generated method stub
                                        System.out.println("service connent==="+ isServiceConnent+mAutoPhoneService) ;
                                        if(isServiceConnent)
                                                mAutoPhoneService.setmArrayList(mArrayList);
                                        mHandler.sendEmptyMessage(mFinish);
                                }
                                
                        }, 1000);
        
        }
        
        
       
        public void onStopService(){
                if(isServiceConnent){
                        unbindService(mConnection);
                        isServiceConnent = false;
                }
        }
        
        protected void onDestory() {
                // TODO Auto-generated method stub
                super.onDestroy();
                onStopService();
                CancelTimer();
                
        }
        
        private void CancelTimer(){
                if (mTimer != null) {
                        mTimer.cancel();
                        mTimer = null;
                }
        }
        
       
        private ServiceConnection mConnection = new ServiceConnection(){

                @Override
                public void onServiceConnected(ComponentName name, IBinder service) {
                        // TODO Auto-generated method stub
                        //我们已经绑定到LocalService , 把IBinder 进行强制类型转换并且获取
                        //Service 实例
                        AutoPhoneBinder binder = (AutoPhoneBinder) service;
                        mAutoPhoneService = binder.getService();
                        isServiceConnent = true;
                        System.out.println("connection====1"+isServiceConnent);
                }

                @Override
                public void onServiceDisconnected(ComponentName name) {
                        // TODO Auto-generated method stub
                        isServiceConnent = false;
                        System.out.println("connection====2");
                }
                
        };
}
[/mw_shl_code]



AutoPhoneService.java


[mw_shl_code=java,true]package com.example.service;

import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.HashMap;

import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.media.AudioManager;
import android.os.Binder;
import android.os.IBinder;
import android.telephony.TelephonyManager;
import android.util.Log;

import com.android.internal.telephony.ITelephony;
import com.example.util.AutoPhoneUtil;


public class AutoPhoneService extends Service {
        private AudioManager audioManager;
        private ITelephony iTelephony;
        private TelephonyManager telephonyMgr;
        private String TAG = "AutoPhoneService";
        private ArrayList> mArrayList = new ArrayList>();
        private int mProgress = 0;
        private String mNumber;
        private String mUserName;
        
        
        public String getmNumber() {
                return mNumber;
        }
        public void setmNumber(String mNumber) {
                this.mNumber = mNumber;
        }
        public String getmUserName() {
                return mUserName;
        }
        public void setmUserName(String mUserName) {
                this.mUserName = mUserName;
        }
       
        public int getmProgress() {
                return mProgress;
        }
        private void setmProgress(int mProgress) {
                this.mProgress = mProgress;
        }
       
        public ArrayList> getmArrayList() {
                return mArrayList;
        }
       
        public void setmArrayList(ArrayList> mArrayList) {
                this.mArrayList = mArrayList;
        }
       
        public void setClearArrayList(){
                this.mArrayList.clear();
        }
       
        private final IBinder mBinder = new AutoPhoneBinder();
       
        public class AutoPhoneBinder extends Binder{
                public AutoPhoneService getService(){
                        //返回service的实例到客户端,用于客户端调用本地service的
                        //公开的方法
                        System.out.println("autophonebinder=====");
                        return AutoPhoneService.this;
                }
        }
        @Override
        public IBinder onBind(Intent intent) {
                // TODO Auto-generated method stub
                System.out.println("onBind=====");
                return mBinder;
        }
       
        private void initManager(Context context) {

                audioManager = (AudioManager) context
                                .getSystemService(Context.AUDIO_SERVICE);
                telephonyMgr = (TelephonyManager) context
                                .getSystemService(Context.TELEPHONY_SERVICE);
                try {
                        Method getITelephonyMethod = TelephonyManager.class
                                        .getDeclaredMethod("getITelephony", (Class[]) null);
                        getITelephonyMethod.setAccessible(true);
                        iTelephony = (ITelephony) getITelephonyMethod.invoke(telephonyMgr,
                                        (Object[]) null);
                } catch (Exception e) {
                        Log.e(TAG, e.toString());
                }
                
        }

        
       
        public boolean CallNumber(){
                initManager(getApplicationContext());
                audioManager.setRingerMode(AudioManager.RINGER_MODE_SILENT);// 静音
                try {
                        int mSize = mArrayList.size();
                        System.out.println("callnumber====" + mSize);
                        HashMap mHashMap = new HashMap();
                        for(int i=0;i
                                mHashMap = mArrayList.get(i);
                                String mPhoneNumber = mHashMap.get(AutoPhoneUtil.phoneNumber);
                                String mUserName = mHashMap.get(AutoPhoneUtil.userName);
                                setmNumber(mPhoneNumber);
                                setmUserName(mUserName);
                                iTelephony.call(mPhoneNumber);
                                long startTime = System.currentTimeMillis();
                                while(System.currentTimeMillis() - startTime <= AutoPhoneUtil.mTime_All){
                                        if(System.currentTimeMillis() - startTime >= AutoPhoneUtil.mTime)
                                                iTelephony.endCall();
                                }
                                setmProgress(i);
                        }
                } catch (Exception e) {
                        Log.e(TAG, e.toString());
                }
                audioManager.setRingerMode(AudioManager.RINGER_MODE_NORMAL);// 正常

                return true;
        }
        
        @Override
        public int onStartCommand(Intent intent, int flags, int startId) {
                // TODO Auto-generated method stub
                
                System.out.println("service start");
                return super.onStartCommand(intent, flags, startId);
        }
}
[/mw_shl_code]



AutoPhoneUtil.java


[mw_shl_code=java,true]package com.example.util;

public class AutoPhoneUtil {
       
        public static final String phoneNumber = "phoneNumber";
        public static final String userName = "userName";
       
        public static final long mTime = 3000;
        public static final long mTime_All = 6000;
}
[/mw_shl_code]

http://www.eoeandroid.com/thread-325208-1-1.html

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有