手機相關操作API

import java.io.File;
import java.util.ArrayList;
import java.util.List;
import android.app.Activity;
import android.app.PendingIntent;
import android.content.ActivityNotFoundException;
import android.content.BroadcastReceiver;
import android.content.ContentResolver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
import android.content.pm.ResolveInfo;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.net.Uri;
import android.provider.ContactsContract;
import android.provider.MediaStore;
import android.provider.Settings;
import android.telephony.PhoneNumberUtils;
import android.telephony.SmsManager;
import android.util.Log;
import android.widget.Toast;


/**
 * 手機相關操作API
 * @version 1.0
 *
 */
public class ToolPhone {

/**
* 直接呼叫指定的號碼(需要<uses-permission android:name="android.permission.CALL_PHONE"/>權限)
* @param mContext 上下文Context
* @param phoneNumber 需要呼叫的手機號碼
*/
public static void callPhone(Context mContext,String phoneNumber){
Uri uri = Uri.parse("tel:" + phoneNumber);
Intent call = new Intent(Intent.ACTION_CALL, uri);
mContext.startActivity(call);
}

/**
* 跳轉至撥號界面
* @param mContext 上下文Context
* @param phoneNumber 需要呼叫的手機號碼
*/
public static void toCallPhoneActivity(Context mContext,String phoneNumber){
Uri uri = Uri.parse("tel:" + phoneNumber);
Intent call = new Intent(Intent.ACTION_DIAL, uri);
mContext.startActivity(call);
}

/**
* 直接調用短信API發送信息(設置監聽發送和接收狀態)
* @param strPhone 手機號碼
* @param strMsgContext 短信內容
*/
public static void sendMessage(final Context mContext,final String strPhone,final String strMsgContext){

//處理返回的發送狀態 
String SENT_SMS_ACTION = "SENT_SMS_ACTION";
Intent sentIntent = new Intent(SENT_SMS_ACTION);
PendingIntent sendIntent= PendingIntent.getBroadcast(mContext, 0, sentIntent,0);
// register the Broadcast Receivers
mContext.registerReceiver(new BroadcastReceiver() {
   @Override
   public void onReceive(Context _context, Intent _intent) {
       switch (getResultCode()) {
       case Activity.RESULT_OK:
           Toast.makeText(mContext,"短信發送成功", Toast.LENGTH_SHORT).show();
           break;
       case SmsManager.RESULT_ERROR_GENERIC_FAILURE:
        break;
       case SmsManager.RESULT_ERROR_RADIO_OFF:
        break;
       case SmsManager.RESULT_ERROR_NULL_PDU:
        break;
       }
   }
}, new IntentFilter(SENT_SMS_ACTION));

//處理返回的接收狀態 
String DELIVERED_SMS_ACTION = "DELIVERED_SMS_ACTION";
// create the deilverIntent parameter
Intent deliverIntent = new Intent(DELIVERED_SMS_ACTION);
PendingIntent backIntent= PendingIntent.getBroadcast(mContext, 0,deliverIntent, 0);
mContext.registerReceiver(new BroadcastReceiver() {
  @Override
  public void onReceive(Context _context, Intent _intent) {
      Toast.makeText(mContext,strPhone+"已經成功接收", Toast.LENGTH_SHORT).show();
  }
}, 
new IntentFilter(DELIVERED_SMS_ACTION)
);

//拆分短信內容(手機短信長度限制)
SmsManager smsManager = SmsManager.getDefault();
ArrayList<String> msgList = smsManager.divideMessage(strMsgContext);
for (String text : msgList) {
smsManager.sendTextMessage(strPhone, null, text, sendIntent, backIntent);
}
}

/**
* 跳轉至發送短信界面(自動設置接收方的號碼)
* @param mActivity Activity
* @param strPhone 手機號碼
* @param strMsgContext 短信內容
*/
public static void toSendMessageActivity(Context mContext,String strPhone,String strMsgContext){
if(PhoneNumberUtils.isGlobalPhoneNumber(strPhone)){
            Uri uri = Uri.parse("smsto:" + strPhone);
            Intent sendIntent = new Intent(Intent.ACTION_VIEW, uri);
            sendIntent.putExtra("sms_body", strMsgContext);
            mContext.startActivity(sendIntent);
        }
}

/**
* 跳轉至聯繫人選擇界面
* @param mContext 上下文
* @param requestCode 請求返回區分代碼
*/
public static void toChooseContactsList(Activity mContext,int requestCode){
Intent intent = new Intent(Intent.ACTION_PICK,ContactsContract.Contacts.CONTENT_URI);
mContext.startActivityForResult(intent, requestCode);
}

/**
* 獲取選擇的聯繫人的手機號碼
* @param mContext 上下文
* @param resultCode 請求返回Result狀態區分代碼
* @param data onActivityResult返回的Intent
* @return
*/
public static String getChoosedPhoneNumber(Activity mContext,int resultCode,Intent data) {
//返回結果
String phoneResult = "";
if (Activity.RESULT_OK == resultCode) 
{
Uri uri = data.getData();
Cursor mCursor = mContext.managedQuery(uri, null, null, null, null);
mCursor.moveToFirst();  

int phoneColumn = mCursor.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER);
int phoneNum = mCursor.getInt(phoneColumn);
if (phoneNum > 0) {
// 獲得聯繫人的ID號
int idColumn = mCursor.getColumnIndex(ContactsContract.Contacts._ID);
String contactId = mCursor.getString(idColumn);
// 獲得聯繫人的電話號碼的cursor;
Cursor phones = mContext.getContentResolver().query(
ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
null,
ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = "
+ contactId, null, null);
if (phones.moveToFirst()) {
// 遍歷所有的電話號碼
for (; !phones.isAfterLast(); phones.moveToNext()) {
int index = phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER);
int typeindex = phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.TYPE);
int phone_type = phones.getInt(typeindex);
String phoneNumber = phones.getString(index);
switch (phone_type) {
case 2:
phoneResult = phoneNumber;
break;
}
}
if (!phones.isClosed()) {
phones.close();
}
}
}
//關閉遊標
mCursor.close();
}

return phoneResult;
}

/**
* 跳轉至拍照程序界面
* @param mContext 上下文
* @param requestCode 請求返回Result區分代碼
*/
public static void toCameraActivity(Activity mContext,int requestCode){
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
mContext.startActivityForResult(intent, requestCode);
}

/**
* 跳轉至相冊選擇界面
* @param mContext 上下文
* @param requestCode 
*/
public static void toImagePickerActivity(Activity mContext,int requestCode){
Intent intent = new Intent(Intent.ACTION_PICK, null);
        intent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,"image/*");
        mContext.startActivityForResult(intent, requestCode);
}

/**
* 獲得選中相冊的圖片
* @param mContext 上下文
* @param data onActivityResult返回的Intent
* @return
*/
public static Bitmap getChoosedImage(Activity mContext,Intent data){
if (data == null) {
            return null;
        }

Bitmap bm = null;


        // 外界的程序訪問ContentProvider所提供數據 可以通過ContentResolver接口
        ContentResolver resolver = mContext.getContentResolver();


        // 此處的用於判斷接收的Activity是不是你想要的那個
        try {
            Uri originalUri = data.getData(); // 獲得圖片的uri
            bm = MediaStore.Images.Media.getBitmap(resolver, originalUri); // 顯得到bitmap圖片
            // 這裏開始的第二部分,獲取圖片的路徑:
            String[] proj = {
                    MediaStore.Images.Media.DATA
            };
            // 好像是android多媒體數據庫的封裝接口,具體的看Android文檔
            Cursor cursor = mContext.managedQuery(originalUri, proj, null, null, null);
            // 按我個人理解 這個是獲得用戶選擇的圖片的索引值
            int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
            // 將光標移至開頭 ,這個很重要,不小心很容易引起越界
            cursor.moveToFirst();
            // 最後根據索引值獲取圖片路徑
            String path = cursor.getString(column_index);
            //不用了關閉遊標
            cursor.close();
        } catch (Exception e) {
        Log.e("ToolPhone", e.getMessage());
        }
        
        return bm;
}

/**
* 調用本地瀏覽器打開一個網頁
* @param mContext 上下文
* @param strSiteUrl 網頁地址
*/
public static void openWebSite(Context mContext,String strSiteUrl){
Intent webIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(strSiteUrl));  
mContext.startActivity(webIntent);
}

/**
* 跳轉至系統設置界面
* @param mContext 上下文
*/
public static void toSettingActivity(Context mContext){
Intent settingsIntent = new Intent(Settings.ACTION_SETTINGS);  
mContext.startActivity(settingsIntent);  
}

/**
* 跳轉至WIFI設置界面
* @param mContext 上下文
*/
public static void toWIFISettingActivity(Context mContext){
Intent wifiSettingsIntent = new Intent(Settings.ACTION_WIFI_SETTINGS);  
mContext.startActivity(wifiSettingsIntent); 
}

/**
* 啓動本地應用打開PDF
* @param mContext 上下文
* @param filePath 文件路徑
*/
public static void openPDFFile(Context mContext, String filePath) {
try {
File file = new File(filePath);
if (file.exists()) {
Uri path = Uri.fromFile(file);
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(path, "application/pdf");
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
mContext.startActivity(intent);
}
} catch (Exception e) {
Toast.makeText(mContext, "未檢測到可打開PDF相關軟件", Toast.LENGTH_SHORT)
.show();
}
}

/**
* 啓動本地應用打開PDF
* @param mContext 上下文
* @param filePath 文件路徑
*/
public static void openWordFile(Context mContext, String filePath) {
try {
File file = new File(filePath);
if (file.exists()) {
Uri path = Uri.fromFile(file);
Intent intent = new Intent("android.intent.action.VIEW");
   intent.addCategory("android.intent.category.DEFAULT");
   intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
   intent.setDataAndType(path, "application/msword");
mContext.startActivity(intent);
}
} catch (Exception e) {
Toast.makeText(mContext, "未檢測到可打開Word文檔相關軟件", Toast.LENGTH_SHORT)
.show();
}
}

/**
* 調用WPS打開office文檔
* http://bbs.wps.cn/thread-22349340-1-1.html
* @param mContext 上下文
* @param filePath 文件路徑
*/
public static void openOfficeByWPS(Context mContext, String filePath){

try {

//文件存在性檢查
File file = new File(filePath);
if (!file.exists()) {
Toast.makeText(mContext, filePath+"文件路徑不存在", Toast.LENGTH_SHORT).show();
return;
}

//檢查是否安裝WPS
String wpsPackageEng = "cn.wps.moffice_eng";//普通版與英文版一樣
// String wpsActivity = "cn.wps.moffice.documentmanager.PreStartActivity";
String wpsActivity2 = "cn.wps.moffice.documentmanager.PreStartActivity2";//默認第三方程序啓動

Intent intent = new Intent();
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
   intent.addCategory(Intent.CATEGORY_DEFAULT);
   intent.setClassName(wpsPackageEng,wpsActivity2);
   
   Uri uri = Uri.fromFile(new File(filePath));
intent.setData(uri);
mContext.startActivity(intent);

}catch (ActivityNotFoundException e){
Toast.makeText(mContext, "本地未安裝WPS", Toast.LENGTH_SHORT).show();
} catch (Exception e) {
Toast.makeText(mContext, "打開文檔失敗", Toast.LENGTH_SHORT).show();
}
}

/**
* 判斷是否安裝指定包名的APP
* @param mContext 上下文
* @param packageName 包路徑
* @return
*/
public static boolean isInstalledApp(Context mContext, String packageName) {
if (packageName == null || "".equals(packageName)) {
return false;
}


try {
ApplicationInfo info = mContext.getPackageManager()
.getApplicationInfo(packageName,
PackageManager.GET_UNINSTALLED_PACKAGES);
return true;
} catch (NameNotFoundException e) {
return false;
}
}

/**
* 判斷是否存在指定的Activity
* @param mContext 上下文
* @param packageName 包名
* @param className activity全路徑類名
* @return
*/
public static boolean isExistActivity(Context mContext, String packageName,String className) {

Boolean result = true;
Intent intent = new Intent();
intent.setClassName(packageName, className);


if (mContext.getPackageManager().resolveActivity(intent, 0) == null) {
result =  false;
} else if (intent.resolveActivity(mContext.getPackageManager()) == null) {
result =  false;
} else {
List<ResolveInfo> list = mContext.getPackageManager()
.queryIntentActivities(intent, 0);
if (list.size() == 0) {
result =  false;
}
}


return result;
}

}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章