欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

Android啟動內(nèi)置APK和動態(tài)發(fā)送接收自定義廣播實例詳解

Android啟動內(nèi)置APK和動態(tài)發(fā)送接收自定義廣播實例詳解

公司主營業(yè)務:網(wǎng)站建設、做網(wǎng)站、移動網(wǎng)站開發(fā)等業(yè)務。幫助企業(yè)客戶真正實現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競爭能力。創(chuàng)新互聯(lián)是一支青春激揚、勤奮敬業(yè)、活力青春激揚、勤奮敬業(yè)、活力澎湃、和諧高效的團隊。公司秉承以“開放、自由、嚴謹、自律”為核心的企業(yè)文化,感謝他們對我們的高要求,感謝他們從不同領域給我們帶來的挑戰(zhàn),讓我們激情的團隊有機會用頭腦與智慧不斷的給客戶帶來驚喜。創(chuàng)新互聯(lián)推出菏澤免費做網(wǎng)站回饋大家。

工作中遇到這樣一個需求,需要為按鍵添加一個親情號,提供一個接口啟動內(nèi)置的APK,思考再三決定更改Framework,利用廣播機制去實現(xiàn)。

一、代碼動態(tài)自主啟動內(nèi)置APK

我們都知道Android系統(tǒng)為我們提供了很多服務管理類,PackageManager主要是管理應用程序包,通過它就可以獲取應用程序信息并構(gòu)建Intent,啟動對應的應用。除此之外Android還未我們提供了一些對應的類來管理相關的xml文件,比如說可以通過PackageInfo來獲取AndroidManifest.xml文件的信息;PackageItemInfo——AndroidManifest.xml文件中所有節(jié)點的基類,提供了這些節(jié)點的基本信息比如label、icon、 meta-data。但它并不直接使用,而是由子類繼承然后調(diào)用相應方法;ApplicationInfo繼承自 PackageItemInfo用于獲取一個特定程序中節(jié)點的信息,比如常見的字段:flags字段: **FLAG_SYSTEM 系統(tǒng)應用程序、FLAG_EXTERNAL_STORAGE 表示該應用安裝在sdcard中;ActivityInfo也繼承自 PackageItemInfo用于獲得應用程序中或者 節(jié)點的信息 。我們可以通過它來獲取我們設置的任何屬性比如:theme 、launchMode、launchmode等,還有ServiceInfo與ActivityInfo類似,只不過是用于獲取節(jié)點的信息;最后一個ResolveInfo是基于節(jié)點來獲取其上一層目錄的信息,比如說、、節(jié)點信息。

Android啟動內(nèi)置APK和動態(tài)發(fā)送接收自定義廣播實例詳解

1、PackageManager簡介

PackageManager主要用于管理應用程序包,獲取程序中所安裝的應用程序包的相關信息,而且是一個抽象類,但是我們可以通過getPackageManager()方法來獲取PackageManager對象。

Android啟動內(nèi)置APK和動態(tài)發(fā)送接收自定義廣播實例詳解

2、代碼實現(xiàn)

包名和mainActivity未知時:

/*
** @param packageName 將要去啟動第三方app的package
*/
private void runAppByPackage(@NonNull String packageName) {
  PackageInfo packageInfo = null;
  PackageManager packageManager=getPackageManager();//獲取PackageManager對象
  try {
    packageInfo = packageManager.getPackageInfo(packageName, 0);//通過包名獲取PackInfo
  } catch (PackageManager.NameNotFoundException e) {
    e.printStackTrace();
  }

  Intent resolveIntent = new Intent(Intent.ACTION_MAIN, null);
  resolveIntent.addCategory(Intent.CATEGORY_LAUNCHER);
  resolveIntent.setPackage(packageInfo.packageName);

  List<ResolveInfo> apps = packageManager.queryIntentActivities(resolveIntent, 0);

  ResolveInfo resolveInfo = apps.iterator().next();
  if (resolveInfo != null ) {
    String pkgeName = resolveInfo.activityInfo.packageName;
    String className = resolveInfo.activityInfo.name;

    Intent intent = new Intent(Intent.ACTION_MAIN);
    intent.addCategory(Intent.CATEGORY_LAUNCHER);

    ComponentName cn = new ComponentName(pkgeName, className);

    intent.setComponent(cn);
    startActivity(intent);
  }
  }

包名和mainActivity已知時:

private void startLenovePlan(){
  ComponentName componetName = new ComponentName( 
     "com.lenovo.ue.service",
"com.lenovo.ue.service.LenovoUEServiceActivity"); 
   try { 
     Intent intent = new Intent(); 
     intent.setComponent(componetName); 
     startActivity(intent); 
   } catch (Exception e) { 

   } 
   }

**二、動態(tài)發(fā)送和接收廣播

1、發(fā)送自定義廣播**

Intent intent = new Intent("android.intent.action.CART_BROADCAST_SILENT");
mContext.sendBroadcast(intent);

2、定義廣播接收器并處理

private static String BROADCAST_FILTER="android.intent.action.CART_BROADCAST_SILENT";
private AudioManager mAudioManager=(AudioManager) (getActivity().getApplicationContext().getSystemService(Context.AUDIO_SERVICE));
private BroadcastReceiver zenmodeReceiver = new BroadcastReceiver() {
  //定義接收廣播接收器
  @Override
  public void onReceive(Context contex, Intent intent) {
    String action = intent.getAction();
    PreferenceScreen sound = (PreferenceScreen) findPreference("hq_ringtone_volume_settings");
    if (action.equals(BROADCAST_FILTER)) {
      int ringMode = mAudioManager.getRingerMode();
      if (ringMode == AudioManager.RINGER_MODE_SILENT) {
        if (findPreference(KEY_RING_VOLUME) != null && findPreference(KEY_NOTIFICATION_VOLUME) != null) {
          ((VolumeSeekBarPreference) findPreference(KEY_RING_VOLUME)).setSeekBarStatus(false, 0);
        }
      } else {
        if (findPreference(KEY_RING_VOLUME) != null && findPreference(KEY_NOTIFICATION_VOLUME) != null) {
          findPreference(KEY_RING_VOLUME).setEnabled(false);
        }
      }
    }
  }
  };

3、注冊廣播接收器

@Override
public void onCreate(Bundle icicle) {
 super.onCreate(icicle);
 addPreferencesFromResource(R.xml.hq_volume_fragment_prefs);
 initVolume(getPreferenceScreen());
 IntentFilter intent = new IntentFilter();
 intent.addAction(BROADCAST_FILTER);
 getActivity().getApplicationContext().registerReceiver(zenmodeReceiver,intent);//   注冊廣播接收器
}

4、使用完畢之后記得釋放掉廣播,否則會有OOM的隱患

 unregisterReceiver(receiver);

這是最簡單的內(nèi)置APK和發(fā)送廣播方式,

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

網(wǎng)站題目:Android啟動內(nèi)置APK和動態(tài)發(fā)送接收自定義廣播實例詳解
路徑分享:http://aaarwkj.com/article28/jesccp.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供虛擬主機域名注冊、小程序開發(fā)、定制網(wǎng)站、網(wǎng)站建設、服務器托管

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站建設
欧美黄色一区二区三区视频| 日韩欧美亚洲制服丝袜| 日韩欧美亚洲精品中文字幕αv| 天天躁人人躁夜夜躁狠狠躁| 国产精品久久久99| 国产精品亚洲av性色| 蜜臀av在线精品国自产拍| 久久成人激情免费视频| 国产亚洲欧美日韩精品| 亚洲视频在线的视频在| 国产成人综合久久精品推荐| 日韩一区不卡在线观看| 91欧美精品在线视频| 亚洲免费小视频在线观看| 国产一级二级三级在线电影| 日本一区二区最新免费| 成人国产精品2021| 日本高清视频免费一区| 亚洲国产欧美日韩一区| 亚洲欧洲美洲中文天堂| av一区二区日韩精品久| 女人的天堂亚洲的天堂欧美| 欧美一区二区三区高清正版| 日韩欧美精品久久黄| 国产精品一区二区毛卡片| 国产欧美日本一区二区| 人人妻人人澡人人爽的视频| 亚洲一区二区三区小蜜桃| 一区二区三区午夜激情| 欧美一区二区三区爽| 亚洲欧美日韩精品在线观看| 少妇熟女视频一区二区三区| 果冻国产精品麻豆成人av| 日本激情精品在线观看| 韩国三级福利在线观看| 欧美日韩一区二区三区在线| 国产成人精品久久一区二区三区| 91九色国产老熟女乱子| 精品国内日本一区二区| 五月天色婷婷亚洲综合一区| 国产毛片久久久久久国产|