欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Telephone dialer

程序员文章站 2023-11-23 17:32:40
运行电话拨号器,需要加这个权限,否则不会打通电话。这个权限是用户权限,是谷歌工程师为了跟自己撇清关系,用户需要权限的时候自己加。 运行android程序的时候提示:ActivityManager: Warning: Activity not started, its current task has ......

Telephone dialer运行电话拨号器,需要加这个权限,否则不会打通电话。这个权限是用户权限,是谷歌工程师为了跟自己撇清关系,用户需要权限的时候自己加。

运行android程序的时候提示:activitymanager: warning: activity not started, its current task has been brought to the front这是因为:

这个不是android平台的bug,而是android本身就是这样一种处理机制。
我们在android平台下,通过返回按钮,或者程序本身的退出操作,去结束一个进程的时候,实际上android虚拟机未必会将这个进程真正的结束掉,在内存允许的情况下,这个程序会以缓存的形式存在android虚拟机中。只有在内存不足的情况下时,android系统会清理长时间不被激活的任务,以为其他程序提供内存。
android这样做,是为了你下一次更加快速的启动这个程序。
所以,出现楼主这种情况,是在你的程序没有发生任何变化,并且内存足够的情况下,会将上一次执行的程序,从缓存cached状态直接放置到任务栈的顶端,则你的程序又可以继续执行了。

消除警告解决办法:

退出虚拟机的程序从新运行一遍。

电话拨号器代码:

  1 package com.example.phonedialer;
  2 
  3 import android.net.uri;
  4 import android.os.bundle;
  5 import android.app.activity;
  6 import android.content.intent;
  7 import android.view.menu;
  8 import android.view.view;
  9 import android.view.view.onclicklistener;
 10 import android.widget.button;
 11 import android.widget.edittext;
 12 import android.widget.toast;
 13 
 14 public class mainactivity extends activity {
 15 
 16     private edittext et_number;
 17 
 18 
 19     @override
 20     protected void oncreate(bundle savedinstancestate) {
 21         super.oncreate(savedinstancestate);
 22         //加载一个布局
 23         setcontentview(r.layout.activity_main);
 24         //找到我们关心的控件;通过源码得知edittext继承textview,textview继承自view,所以可以这样写。
 25         et_number = (edittext) findviewbyid(r.id.edittext1);
 26         
 27         //找到按钮;通过源码得知button继承自textview,textview继承自view,所以可以这样写。
 28         button btn_call = (button) findviewbyid(r.id.button1);
 29         /**
 30          * 方法里面接收的参数是onclicklistener类型,发现它是一个接口类型。
 31          * interface definition for a callback to be invoked when a view is clicked.
 32          * 定义了一个接口类型,注册了一个回调事件,当一个view被点击的时候走这个回调方法。
 33          */
 34         btn_call.setonclicklistener(new myclicklistener());
 35         /**
 36          * 这里的this(context也就是上下文的意思),代表mainactivity。查看源码可以得知
 37          * mainactivity继承自context.
 38          */
 39         //toast.maketext(this, text, duration)
 40         
 41     }
 42     /**
 43      * 定义一个类,去实现按钮需要的接口类型
 44      */
 45     private class myclicklistener implements onclicklistener {
 46 
 47         /**
 48          * called when a view has been clicked.
 49          * 当按钮已经被点击的时候调用该方法。
 50          */
 51         @override
 52         public void onclick(view v) {
 53             /**
 54              * 获取edittext控件的文本内容,第一时间想到通过et_number来获取,
 55              * 但是这个变量不是全局变量,获取不到。所以需要将它变成全局变量。
 56              * return the text the textview is displaying
 57              * 返回textview显示的内容。
 58              * editable android.widget.edittext.gettext()
 59              */
 60             string number = et_number.gettext().tostring().trim();
 61             if("".equals(number)) {
 62                 /**
 63                  * context上下文
 64                  * the method maketext(context, charsequence, int) 
 65                  * in the type toast is not applicable for the arguments (mainactivity.myclicklistener, string, int)
 66                  * 这里的this代表的是mainactivity.myclicklistener,需要的是一个context,所以编译报错。
 67                  * 通过类名.this可以设置吐司要在哪个activity显示。length_short 0  length_long 1
 68                  */
 69                 toast.maketext(mainactivity.this, "number不能为空", toast.length_short).show(); 
 70                 return;
 71             }
 72             //拿到number进行拨打电话.
 73             /**
 74              * 因为拨打电话的代码谷歌工程师已经写好了,所以不需要我们手动写逻辑,我们只需要
 75              * 把它调起来就可以了。意图:intent
 76              */ 
 77             intent intent = new intent();
 78             //设置动作 打电话。
 79             intent.setaction(intent.action_call);
 80             //设置打的数据 uri数据。uri data
 81             /**
 82              * url:统一资源定位符 
 83              * uri:统一资源标识符 自己定义的路径想代表什么就代表什么。
 84              */
 85             intent.setdata(uri.parse("tel:"+number));
 86             //开启意图
 87             startactivity(intent); 
 88             
 89             
 90             
 91         }
 92         
 93     }
 94     
 95 
 96 
 97     @override
 98     public boolean oncreateoptionsmenu(menu menu) {
 99         // inflate the menu; this adds items to the action bar if it is present.
100         getmenuinflater().inflate(r.menu.main, menu);
101         return true;
102     }
103     
104 }