Android第二個小練習:撥號提醒

來源:互聯網
上載者:User

使用觸屏手機的人都有過這樣的一種錯誤:在撥號的時候觸錯了人,一步小心就呼叫出去了,這個時候手忙腳亂的去掛斷。那麼針對上面的情景設計,我做了這麼一個小的練習,就是說當要撥打到電話的時候,首先彈出一個對話方塊,確認要撥打給電話XXX,點確認以後呼叫,點取消以後取消呼叫。
先:





因為是一次自學聯絡,所以功能上並不複雜,但是個人有發現有這樣的app在市面上流通,所以做一個對別人有用的練習,還是很有成就感的。下面提出主要的代碼

[java]
package abortCall.test; 
 
import android.app.Activity; 
import android.app.AlertDialog; 
import android.content.DialogInterface; 
import android.content.SharedPreferences; 
import android.content.DialogInterface.OnClickListener; 
import android.content.Intent; 
import android.net.Uri; 
import android.os.Bundle; 
 
public class AbortCallActivity extends Activity { 
    /** Called when the activity is first created. */ 
    String nums =""; 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState); 
        try{ 
            Bundle bundle = this.getIntent().getExtras(); 
            nums = bundle.getString("num"); 
            ShowDialog(); 
        }catch(Exception ex){ 
        } 
    } 
    private void ShowDialog(){ 
        AlertDialog.Builder builder = new AlertDialog.Builder(this); 
        builder.setMessage("您確定要撥號給"+nums+"嗎?"); 
        builder.setTitle("提醒"); 
        builder.setPositiveButton("確定", new OnClickListener(){ 
            public void onClick(DialogInterface dialog,int which){ 
                SharedPreferences settings = getSharedPreferences("SETTING_INFO",0); 
                settings.edit().putBoolean("IsAllowed", true).commit(); 
                Intent intent=new Intent(Intent.ACTION_CALL,Uri.parse("tel:"+nums));  
                startActivity(intent); 
                Finish(); 
            } 
        }); 
        builder.setNegativeButton("取消", new OnClickListener(){ 
            public void onClick(DialogInterface dialog,int which){ 
                Finish(); 
            } 
        }); 
        builder.create().show(); 
    } 
    private void Finish(){ 
        this.finish(); 
        System.exit(0); 
    } 

package abortCall.test;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.SharedPreferences;
import android.content.DialogInterface.OnClickListener;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;

public class AbortCallActivity extends Activity {
    /** Called when the activity is first created. */
 String nums ="";
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        try{
         Bundle bundle = this.getIntent().getExtras();
         nums = bundle.getString("num");
         ShowDialog();
        }catch(Exception ex){
        }
    }
    private void ShowDialog(){
  AlertDialog.Builder builder = new AlertDialog.Builder(this);
  builder.setMessage("您確定要撥號給"+nums+"嗎?");
  builder.setTitle("提醒");
  builder.setPositiveButton("確定", new OnClickListener(){
   public void onClick(DialogInterface dialog,int which){
    SharedPreferences settings = getSharedPreferences("SETTING_INFO",0);
    settings.edit().putBoolean("IsAllowed", true).commit();
    Intent intent=new Intent(Intent.ACTION_CALL,Uri.parse("tel:"+nums));
    startActivity(intent);
    Finish();
   }
  });
  builder.setNegativeButton("取消", new OnClickListener(){
   public void onClick(DialogInterface dialog,int which){
    Finish();
   }
  });
  builder.create().show();
 }
    private void Finish(){
     this.finish();
     System.exit(0);
    }
}

 

[html]
package abortCall.test; 
 
import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.content.SharedPreferences; 
 
 
public class callReceiver extends BroadcastReceiver { 
 
     
    private Context context; 
    @Override 
    public void onReceive(Context context, Intent intent){ 
        String action = intent.getAction(); 
        String PhoneNum = intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER); 
        this.context = context; 
        SharedPreferences settings = context.getSharedPreferences("SETTING_INFO",0); 
        boolean IsAllowed = settings.getBoolean("IsAllowed",false); 
        if(!IsAllowed){ 
            setResultData(null); 
            intent.setClass(context, AbortCallActivity.class); 
            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
            intent.putExtra("num", PhoneNum); 
            context.startActivity(intent); 
        } 
        settings.edit().putBoolean("IsAllowed", false).commit(); 
        this.clearAbortBroadcast(); 
         
    } 
    public void Allowed(){ 
         
    } 
     
 
    } 
package abortCall.test;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;


public class callReceiver extends BroadcastReceiver {

 
 private Context context;
 @Override
 public void onReceive(Context context, Intent intent){
  String action = intent.getAction();
  String PhoneNum = intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER);
  this.context = context;
  SharedPreferences settings = context.getSharedPreferences("SETTING_INFO",0);
  boolean IsAllowed = settings.getBoolean("IsAllowed",false);
  if(!IsAllowed){
   setResultData(null);
   intent.setClass(context, AbortCallActivity.class);
   intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
   intent.putExtra("num", PhoneNum);
   context.startActivity(intent);
  }
  settings.edit().putBoolean("IsAllowed", false).commit();
  this.clearAbortBroadcast();
  
 }
 public void Allowed(){
  
 }
 

 }
[html]
<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="abortCall.test" 
    android:versionCode="1" 
    android:versionName="1.0" > 
 
    <uses-sdk android:minSdkVersion="8" /> 
    <uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS"/> 
    <uses-permission android:name="android.permission.CALL_PHONE"/> 
    <application 
        android:icon="@drawable/ic_launcher" 
        android:label="@string/app_name" > 
        <activity 
            android:name=".AbortCallActivity" 
            android:label="@string/app_name" > 
            <intent-filter> 
                <action android:name="android.intent.action.MAIN" /> 
 
                <category android:name="android.intent.category.LAUNCHER" /> 
            </intent-filter> 
        </activity> 
        <receiver android:name="callReceiver"> 
            <intent-filter android:priority="-1" > 
                <action android:name="android.intent.action.NEW_OUTGOING_CALL"/> 
            </intent-filter> 
        </receiver> 
    </application> 
</manifest> 
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="abortCall.test"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk android:minSdkVersion="8" />
    <uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS"/>
    <uses-permission android:name="android.permission.CALL_PHONE"/>
 <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name" >
        <activity
            android:name=".AbortCallActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <receiver android:name="callReceiver">
            <intent-filter android:priority="-1" >
                <action android:name="android.intent.action.NEW_OUTGOING_CALL"/>
            </intent-filter>
        </receiver>
    </application>
</manifest>


主要的思路:在手機撥號的時候獲得android.permission.PROCESS_OUTGOING_CALLS 的Broadcast事件,然後對阻斷撥號,並且跳轉到Activity.由Activity彈出對話方塊。經過對話方塊確認以後,再次撥號。因為再次撥號依然會被阻斷,所以想可以傳遞一個參數給Receiver告訴它這次撥號是經過許可的。就不會阻斷,因為無法直接傳遞參數,所以使用了一個SharedPreferences來儲存傳遞值。從而避免再次被阻斷。

通過本次聯絡主要掌握的知識點:

1、如何註冊和使用一個BroadCastReceiver.

2、BroadCastReceiver如何啟用一個Activity:要點是intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

3、BroadcastReceiver無法直接啟動一個Dialog

4、如何使用一個Dialog

5、如何在系統無法支援明確傳遞參數的情況下去傳遞一個參數,使用SharedPreferres去傳遞參數,做到靈活應用和變通。

6、如何阻斷撥號和播出去一個號碼。

7、由使用簡單頁面跳轉到了使用一些比較系統的介面,感覺到可以控制機器了。

附上原始碼

 

摘自 技術專欄

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.