Android实例

简易的拨打电话实现

 简易的拨打电话实现:

首先,打电话是手机底层服务,涉及到用户的隐私信息,在清单文件中添加<uses-permission android:name="android.permission.CALL_PHONE" />;
第二,自定义Intent。

1、带入CALL,通过Uri.parse()带入用户的手机号码,最终以startActivity()启动。
Intent intent = new Intent("android.intent.action.CALL", Uri .parse("tel:" + inNumber));
startActivity(intent);

2、也可以通过调用虚拟键盘,通过Uri.parse()带入用户的手机号码,最终以startActivity()启动。

Intent intent = new Intent("android.intent.action.DIAL", Uri.parse("tel:" + inNumber));

startActivity(intent);

总结:前者的启动方式,是直接就会拨打输入的这个号码,即跳至到拨打了电话的界面;而后者,只是调用虚拟的拨打电话的键盘,即电话号码输入的键盘,此时并没有拨通这个号码,而只是将这个输入的号码显示在此界面上,你可以选择不拨打,也就换号码等。

至于,下面两种方式,只是跳转至拨号界面,而且在Intent构造中不可带入号码(向上面一样的方式),否则出现错误。
                 Intent intent = new Intent("android.intent.action.CALL_BUTTON");
                 Intent intent = new Intent(Intent.ACTION_CALL_BUTTON);

在输入框中添加属性: android:phoneNumber="true" ,避免自己要对输入的数据进行判断。

Java代码:(对于layout文件很简单,就一个EditText,Button)

public class MainActivity extends Activity {

    private EditText et = null;
    private Button tv = null;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        et = (EditText) findViewById(R.id.et);
        tv = (Button) findViewById(R.id.tv);

        tv.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                String inNumber = et.getText().toString();

                Intent intent = new Intent("android.intent.action.CALL", Uri
                        .parse("tel:" + inNumber));

                startActivity(intent);
            }
        });
    }

    @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;
    }
}


发送短信

必须在清单文件中假如:<uses-permission android:name="android.permission.SEND_SMS" />


发送短信有三种方式,下面采用sendTextMessage()方法:

发送短信的关键程序是通过SmsManager对象的sendTextMessage()方法来实现,其中sendTextMessage()方法需要传入五个值依次是:
收件人地址(string)
发送地址(String)
正文(String)
发送服务(PendingIntent)
送达服务(PendingIntent)
其中收件人与正文不可以为null的两个参数。

Java代码:

public class MainActivity extends Activity {

    private EditText et = null;
    private EditText et1 = null;
    private Button tv = null;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        et = (EditText) findViewById(R.id.et);
        et1 = (EditText) findViewById(R.id.et1);
        tv = (Button) findViewById(R.id.tv);

        tv.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                String inNumber = et.getText().toString();
                String inMessage = et1.getText().toString();

                SmsManager smsManager = SmsManager.getDefault();
                /*
                 * 条件通过,发送短信
                 * 先构建PendingIntent对象并使用getBroadcast()广播,将PendingIntent
                 * ,电话,短信文字参数传入 sendTextMessage()方法中,发送短信
                 */
                PendingIntent pi = PendingIntent.getBroadcast(
                        MainActivity.this, 0, new Intent(), 0);

                smsManager.sendTextMessage(inNumber, null, inMessage, pi, null);

            }
        });
    }

    @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;
    }
}

Vibrate震动

 首先,加入<uses-permission android:name="android.permission.VIBRATE" />,在调用方法vibrate(new long[] { 100, 10, 1000, 5000 }, -1)时,需要传入一个long类型的数组,前面三个是震动的大小,可以设置为一大一小,最后一个但表震动的事件长短,还有一个repeat参数,-1表示只震动一次,0表示持续震动。取消震动调用方法cancel()。

Toast显示更多的控件以及动态加载布局文件

在Toast中放入其他的控件,可以通过View赋值给Toast

LinearLayout linearLayout = new LinearLayout(MainActivity.this);
                linearLayout.setOrientation(LinearLayout.VERTICAL);

                Toast toast = Toast.makeText(MainActivity.this, "HI",
                        Toast.LENGTH_SHORT);

                ImageView im = new ImageView(MainActivity.this);

                im.setImageResource(R.drawable.ic_launcher);

                TextView tv = new TextView(MainActivity.this);

                tv.setText("Welcome to!");

                linearLayout.addView(im);
                linearLayout.addView(tv);

                toast.setView(linearLayout);

                toast.show();

================================================================

动态一:

LinearLayout views = (LinearLayout) getLayoutInflater()
                        .inflate(R.layout.dd, null);


Toast toast = Toast.makeText(MainActivity.this, "HI",Toast.LENGTH_SHORT);

toast.setView(views);

toast.show();


动态二:

View views = LayoutInflater.from(MainActivity.this).inflate(
                        R.layout.dd, null);

Toast toast = Toast.makeText(MainActivity.this, "HI",Toast.LENGTH_SHORT);

 toast.setView(views);

 toast.show();


动态三:

LayoutInflater inflater = (LayoutInflater) MainActivity.this
                        .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
 View views = inflater.inflate(R.layout.dd, null);

                
Toast toast = Toast.makeText(MainActivity.this, "HI",Toast.LENGTH_SHORT);

toast.setView(views);//还可以设置与手机的相对位置

toast.show();

上面三种方式其实,就是获取LayoutInflater对象的三种不同方式而已,都是通过LayoutInflater对象来调用inflate方法。

手机状态栏中的图标和文字NotificationManager与Notification

状态栏手机最上方有一条显示电池状态、时间、信号强度等等,这是手机里面的状态栏(Status Bar)。当有电话打入、或者有新的短信时状态栏中会有提示。

Java代码:

MainActivity.java
public class MainActivity extends Activity {
    
  
    private Spinner sp3;
    private ArrayAdapter<String> mAdapter;
    private String[] mStatuses = { "OnLine", "Leave", "Busy", "Hide" };
    private NotificationManager mNotificationManager;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mNotificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);

        initView();

        sp3.setOnItemSelectedListener(new OnItemSelectedListener() {

            @Override
            public void onItemSelected(AdapterView<?> parent, View view,
                    int position, long id) {
                if (mStatuses[position].equals("OnLine")) {
                    setNotiType(R.drawable.ic_launcher, "Online");
                } else if (mStatuses[position].equals("Leave")) {
                    setNotiType(R.drawable.ic_launcher, "Leave");
                } else if (mStatuses[position].equals("Hide")) {
                    setNotiType(R.drawable.ic_launcher, "Hide");
                }

            }

            @Override
            public void onNothingSelected(AdapterView<?> parent) {

            }
        });
    }

    @SuppressWarnings("deprecation")
    protected void setNotiType(int icLauncher, String string) {
        // 创建新的Intent
        Intent notifyIntent = new Intent(this, NotifyActivity.class);

        notifyIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        // 创建PendingIntent作为设置运行的Activity
        PendingIntent appIntent = PendingIntent.getActivity(MainActivity.this,
                0, notifyIntent, 0);

        // 创建Notication,并设置相关参数
        Notification mNotification = new Notification();
        // 设置statusbar显示的icon
        mNotification.icon = icLauncher;
        // 设置statusbar显示的信息
        mNotification.tickerText = string;
        // 设置同时发出的声音
        mNotification.defaults = Notification.DEFAULT_SOUND;
        // 设置Notification留言条的参数
        mNotification.setLatestEventInfo(MainActivity.this, "QQ", string,
                appIntent);
        // 送出Notification
        mNotificationManager.notify(0, mNotification);
    }

    private void initView() {
         sp3 = (Spinner) findViewById(R.id.bt3);

        mAdapter = new ArrayAdapter<String>(this,
                android.R.layout.simple_spinner_item, mStatuses);
        // 应用Spinner定义的下拉模式
        mAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        sp3.setAdapter(mAdapter);
    }

    @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;
    }
}


NotifyActivity.java (点击提示消息进入的界面)
public class NotifyActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        Toast.makeText(NotifyActivity.this, "This is a test.",
                Toast.LENGTH_SHORT).show();
        
        finish();//结束掉
    }
}

mNotification.defaults = Notification.DEFAULT_SOUND;//系统默认的声音
mNotification.defaults = Notification.DEFAULT_LIGHTS;//手机屏幕发亮
mNotification.defaults = Notification.DEFAULT_VIBRATE;//手机震动
mNotification.defaults = Notification.DEFAULT_ALL;//三者都有

恢复手机默认桌面

添加<uses-permission android:name="android.permission.SET_WALLPAPER"/>,重写ContextWrapper中的clearWallpaper()方法。

如下代码:

public class MainActivity extends Activity {

    private Button returnBack = null;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        returnBack = (Button) findViewById(R.id.returnback);

        returnBack.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                try {
                    clearWallpaper();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        });
    }

    // 重写ContextWrapper中的clearWallpaper()方法
    @Override
    public void clearWallpaper() throws IOException {
        // TODO Auto-generated method stub
        super.clearWallpaper();
    }

}

更换桌面可以采用方法:setWallpaper(InputStream data)。

获取桌面的方法:getWallpaper()或者peekWallpaper(),两者都是返回Drawable,前者返回有效的资源,当手机没有设定桌面时,前者返回手机默认的桌面,而后者返回null,常用在替换手机桌面程序使用,也可以将获取的Drawable对象转成Bitmap。

 TextView的正则表达式

 一、android:autoLink中设置相应的属性值
         <TextView
         android:id="@+id/tv"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_below="@+id/et"
         android:autoLink="web|email|phone"/>
 二、Linkify 判断输入是何种形式,并于系统链接
        tv.setText(et.getText());//在这条语句后紧紧接着下句Linkfy
        // 判断输入是何种形式,并于系统链接
        Linkify.addLinks(tv, Linkify.WEB_URLS | Linkify.PHONE_NUMBERS | Linkify.EMAIL_ADDRESSES);
        // 直接设置为all,支持所支持的。

------------------还可以用在TextView的子类中,比如Button,设置
<Button
        android:id="@+id/tv"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/et"
        android:autoLink="web|email|phone"
        android:text="457869232" />

点击后到达拨号界面。

Context

Context提供的有关文件的方法:
                getDir(String name, int mode);
                getFileStreamPath(String name)
                getFilesDir();
                openFileInput(String name);
                openFileOutput(String name, mode)
以上五个方法获取文件的路径都是在/data/data/package name/files,eg:/data/data/com.example.back/files。


WIFI的操作打开

WifiManager状态常数及意义

WifiManager状态常数

   

WifiManager.WIFI_STATE_ENABLED

WiFi已打开

WifiManager.WIFI_STATE_ENABLING

WiFi打开中

WifiManager.WIFI_STATE_DISABLING

WiFi关闭中

WifiManager.WIFI_STATE_DISABLED

WiFi已关闭

WifiManager.WIFI_STATE_UNKNOWN

未知的WiFi状态

由于WiFiManager的打开(setWifiEnabled(true))或关闭(setWifiEnabled(false))方法,在运行的打开WiFi过程中,会经过以下顺序:

1.WifiManager.WIFI_STATE_DISABLED

2.WifiManager.WIFI_STATE_ENABLING

3.WifiManager.WIFI_STATE_ENABLED

而在关闭WiFi的过程中,则需经过以下顺序:

1.WifiManager.WIFI_STATE_ENABLED

2.WifiManager.WIFI_STATE_DISABLING

3.WifiManager.WIFI_STATE_DISABLED

打开或者关闭wifi是需要一段时间的,如果在状态处于WIFI_STATE_ENABLING时,运行一次"打开"功能,将导致错误,因此,程序必须对这类的事件状态进行捕捉,否则,就不知道WiFi究竟何时可以打开完毕,而手机与WiFi AP的连接也有访问的时间,并非是马上单击就能立即反应其打开结果。

在AndroidManifest.xml中必须添加WiFi以及访问网络状态的权限,但并非一定要有Android.permission.INTERNET以及Android.permission.WAKE_LOCK这两个权限。会放上这两个权限,是因为大部分的WiFi连接创建之后,都会去检查WiFi是否具有因特网的连接能力;因为连接检查需要一些时间,所以,通常程序中会加上WAKE_LOCK权限,控制不要让背景灯光暗下来,故编写以下的权限提供参考。

    <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.WAKE_LOCK" />

查看一部手机之前连过的或者感应到的所有WIFI热点列表,见代码。

package com.example.wifi;

import java.util.ArrayList;
import java.util.List;

import android.app.Activity;
import android.content.Context;
import android.net.wifi.WifiConfiguration;
import android.net.wifi.WifiManager;
import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;

public class MainActivity extends Activity {
    private Button mButton01;
    private ListView mListView01;
    private ArrayAdapter<String> aryAdapter1;
    private ArrayList<String> arylistTask;
    private WifiManager mWiFiManager01;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mButton01 = (Button) findViewById(R.id.myButton1);
        mListView01 = (ListView) findViewById(R.id.myListView1);

        /* 以getSystemService取得WIFI_SERVICE */
        mWiFiManager01 = (WifiManager) this
                .getSystemService(Context.WIFI_SERVICE);

        mWiFiManager01.startScan();

        mButton01.setOnClickListener(new Button.OnClickListener() {
            @Override
            public void onClick(View arg0) {
                // TODO Auto-generated method stub
                arylistTask = new ArrayList<String>();

                /* 设置WifiConfiguration对象 */
                List<WifiConfiguration> wificonf = mWiFiManager01
                        .getConfiguredNetworks();

                /* 若发现至少1个WiFi无线基地台 */
                if (wificonf.size() > 0) {
                    /* 尝试打开WiFi服务 */
                    if (!mWiFiManager01.isWifiEnabled()) {
                        if (mWiFiManager01.getWifiState() != WifiManager.WIFI_STATE_ENABLING) {
                            mWiFiManager01.setWifiEnabled(true);
                        }
                    }

                    /* 尝试连接第一个无线网络基地台 */
                    int intNetworkID = wificonf.get(0).networkId;

                    /* 通过enableNetwork连接至该无线网络设置 */
                    mWiFiManager01.enableNetwork(intNetworkID, true);

                    int i = 1;
                    /* 通过循环将无线网络的SSID以及NetWorkID放入Adapter */
                    for (WifiConfiguration amTask : wificonf) {
                        arylistTask.add("" + (i++) + ": " + amTask.SSID
                                + "(ID=" + amTask.networkId + ")");
                    }
                    aryAdapter1 = new ArrayAdapter<String>(MainActivity.this,
                            android.R.layout.simple_list_item_1, arylistTask);

                    /* 程序以ListView的方式将结果呈现出来 */
                    mListView01.setAdapter(aryAdapter1);
                }
            }
        });
    }
}



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值