那么 - 草稿

//判斷activity是否存在棧內(nèi)
private boolean isExistActivity(Class<?> activity) {
    Intent intent = new Intent(getContext(), activity);
    ComponentName cmpName = intent.resolveActivity(getContext().getPackageManager());
    boolean flag = false;
    if (cmpName != null) {// 說(shuō)明系統(tǒng)中存在這個(gè)activity
        ActivityManager am = (ActivityManager) getContext().getSystemService(ACTIVITY_SERVICE);
        List<ActivityManager.RunningTaskInfo> taskInfoList = am.getRunningTasks(10);//獲取從棧頂開(kāi)始往下查找的10個(gè)activity
        for (ActivityManager.RunningTaskInfo taskInfo : taskInfoList) {
            if (taskInfo.baseActivity.equals(cmpName)) {// 說(shuō)明它已經(jīng)啟動(dòng)了
                flag = true;
                break;//跳出循環(huán)茬故,優(yōu)化效率
            }
        }
    }
    return flag;//true 存在 falese 不存在
}

桌面快捷方式
添加權(quán)限:
<uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT" />
<uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" />
<uses-permission android:name="com.android.launcher.permission.UNINSTALL_SHORTCUT"/>桌面快捷方式
public void click1(View view) {
Parcelable icon = Intent.ShortcutIconResource.fromContext(
getApplicationContext(), R.drawable.logo);
Intent intent = new Intent();
intent.setAction("com.android.launcher.action.INSTALL_SHORTCUT");
//生成圖標(biāo)的名稱
intent.putExtra(Intent.EXTRA_SHORTCUT_NAME, "你能");
//不允許重復(fù)創(chuàng)建
//intent.putExtra("duplicate", false);
intent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE,icon);
Intent intent2 = new Intent();
intent2.setAction(Intent.ACTION_MAIN);
intent2.addCategory(Intent.CATEGORY_LAUNCHER);
intent2.setComponent(new ComponentName(this, MainActivity.class));
intent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, intent2);
sendBroadcast(intent);
}}

打開(kāi)其他應(yīng)用
PackageManager packageManager = getPackageManager(); Intent intent = new Intent(); intent = packageManager.getLaunchIntentForPackage("軟件包名");
startActivity(intent);

保存assets2sdcard
public void copyFileFromAssetsToSDCard()throws Throwable{ InputStream inStream=getAssets().open("my.zip");
String filePath=android.os.Environment.getExternalStorageDirectory()
.getAbsolutePath()+"/"+"my.zip";
OutputStream outStream=new FileOutputStream(filePath);
byte[]buffer=new byte[1024];
int length=inStream.read(buffer);
outStream.write(buffer,0,length);
outStream.flush();
inStream.close();
outStream.close();

// 動(dòng)畫旋轉(zhuǎn)

tv=(TextView) findViewById(R.id.mainTextView1);
an = new RotateAnimation(0, 360, Animation.RELATIVE_TO_SELF, 0.5f,Animation.RELATIVE_TO_SELF, 0.5f);
an.setInterpolator(new LinearInterpolator());// 不停頓
an.setRepeatCount(100);// 重復(fù)次數(shù)
an.setFillAfter(true);// 停在最后
an.setDuration(4000);// 旋轉(zhuǎn)一次的時(shí)間
tv.startAnimation(an);
系統(tǒng)分享
Intent shareIntent = new Intent(); shareIntent.setAction(Intent.ACTION_SEND);
去標(biāo)題
super.onCreate(savedInstanceState);
requestWindowFeature ( Window.FEATURE_NO_TITLE );//取消標(biāo)題

    getWindow ( ).setFlags ( WindowManager.LayoutParams.FLAG_FULLSCREEN, 
                            WindowManager.LayoutParams.FLAG_FULLSCREEN );//設(shè)置全屏
    
            Toast.makeText(MainActivity.this,"好東西要分享哦",Toast.LENGTH_SHORT).show();
                shareIntent.putExtra(Intent.EXTRA_TEXT,      " 哈嘍快來(lái)找他要吧!");
                shareIntent.setType("text/plain");
                startActivity(Intent.createChooser(shareIntent, "分享到"));

簽名查
PackageInfo packageInfo = getPackageManager().getPackageInfo(packname, PackageManager.GET_SIGNATURES);
Signature[] signs = packageInfo.signatures;
Signature sign = signs[0];

卸載apk
Uri uri = Uri.fromParts("package", strPackageName, null);
Intent it = new Intent(Intent.ACTION_DELETE, uri);
startActivity(it);
按鍵
public boolean onKeyDown(int keyCode, KeyEvent event)

{
if (keyCode == event.KEYCODE_BACK)

{   //返回鍵 }

if (keyCode == event.KEYCODE_HOME)

{   //HOME鍵 }

if (keyCode == event.KEYCODE_MENU)

{   //菜單鍵 }

if (keyCode == event.KEYCODE_VOLUME_DOWN)

{   //音量下鍵 }

if (keyCode == event.KEYCODE_VOLUME_UP)

{   //音量上鍵 }

if (keyCode == event.KEYCODE_POWER)

{   //關(guān)機(jī)鍵 }

return true;

}

// 打開(kāi)指定app 包 activity
// Intent intent = new Intent(Intent.ACTION_MAIN);
// intent.addCategory(Intent.CATEGORY_LAUNCHER);
// ComponentName cn = new ComponentName(packageName, className);
// intent.setComponent(cn);
// startActivity(intent);

// String packageName = getContext().getPackageName();
// Intent intent = new Intent();
// PowerManager powerManager = (PowerManager) getContext().getSystemService(Context.POWER_SERVICE);
// if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
// //請(qǐng)求電池優(yōu)化白名單
// if (powerManager.isIgnoringBatteryOptimizations(packageName)) {
// intent.setAction(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS);
// } else {
// intent.setAction(Settings.ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGS);
// intent.setData(Uri.parse("package:" + packageName));
// }
// }
7.0
<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="${APPLICATIONID}.FileProvider"
android:exported="false"
android:grantUriPermissions="true"
tools:replace="android:authorities">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_path" />
</provider>

<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<root-path
name="root"
path="" />
<files-path
name="files"
path="" />

<cache-path
    name="cache"
    path="" />

<external-path
    name="external"
    path="" />

<external-files-path
    name="external_file_path"
    path="" />
<external-cache-path
    name="external_cache_path"
    path="" />

</paths>
private void installApk() { //安裝程序
Intent intentUpdate = new Intent("android.intent.action.VIEW");
intentUpdate.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { //對(duì)Android N及以上的版本做判斷
Uri apkUriN = FileProvider.getUriForFile(MainActivity2.this,
MainActivity2.this.getApplicationContext().getPackageName() + ".FileProvider", new File(upgradeMsg.apkpath));
intentUpdate.addCategory("android.intent.category.DEFAULT");
intentUpdate.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); //天假Flag 表示我們需要什么權(quán)限
intentUpdate.setDataAndType(apkUriN, "application/vnd.android.package-archive");
} else {
Uri apkUri = Uri.fromFile(new File(upgradeMsg.apkpath));
intentUpdate.setDataAndType(apkUri, "application/vnd.android.package-archive");
}
startActivity(intentUpdate);
}

8.0打開(kāi)安裝未知來(lái)源
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES"/>

private static final int INSTALL_PACKAGES_REQUESTCODE = 10011;
private static final int GET_UNKNOWN_APP_SOURCES = 10012;
private void checkAndroidO() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { //系統(tǒng) Android O及以上版本
//是否需要處理未知應(yīng)用來(lái)源權(quán)限现喳。 true為用戶信任安裝包安裝 false 則需要獲取授權(quán)
boolean canRequestPackageInstalls = getPackageManager().canRequestPackageInstalls();
if (canRequestPackageInstalls) {
installApk();
} else {
//請(qǐng)求安裝未知應(yīng)用來(lái)源的權(quán)限
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.REQUEST_INSTALL_PACKAGES}, INSTALL_PACKAGES_REQUESTCODE);
}
} else { //直接安裝流程
installApk();
}
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
switch (requestCode) {
case INSTALL_PACKAGES_REQUESTCODE:
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { //如果已經(jīng)有這個(gè)權(quán)限 則直接安裝 否則跳轉(zhuǎn)到授權(quán)界面
installApk();
} else {
Uri packageURI = Uri.parse("package:" + getPackageName()); //獲取包名汁汗,直接跳轉(zhuǎn)到對(duì)應(yīng)App授權(quán)界面
Intent intent = new Intent(Settings.ACTION_MANAGE_UNKNOWN_APP_SOURCES, packageURI);
startActivityForResult(intent, GET_UNKNOWN_APP_SOURCES);
}
break;
}

  //我們還需要在 onActivityResult方法中繼續(xù)做一些相應(yīng)的處理弛槐,好讓授權(quán)成功后 返回App可以直接安裝
   @Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    //8.0 以上系統(tǒng) 強(qiáng)更新授權(quán) 界面
    switch (requestCode) {
        case GET_UNKNOWN_APP_SOURCES:
            checkAndroidO();
            break;
        default:
            break;
    }

}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末员凝,一起剝皮案震驚了整個(gè)濱河市橙困,隨后出現(xiàn)的幾起案子瞧掺,更是在濱河造成了極大的恐慌,老刑警劉巖凡傅,帶你破解...
    沈念sama閱讀 218,204評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件辟狈,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡夏跷,警方通過(guò)查閱死者的電腦和手機(jī)哼转,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)槽华,“玉大人壹蔓,你說(shuō)我怎么就攤上這事∶ㄌ” “怎么了佣蓉?”我有些...
    開(kāi)封第一講書人閱讀 164,548評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)亲雪。 經(jīng)常有香客問(wèn)我勇凭,道長(zhǎng),這世上最難降的妖魔是什么匆光? 我笑而不...
    開(kāi)封第一講書人閱讀 58,657評(píng)論 1 293
  • 正文 為了忘掉前任套像,我火速辦了婚禮,結(jié)果婚禮上终息,老公的妹妹穿的比我還像新娘夺巩。我一直安慰自己贞让,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,689評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布柳譬。 她就那樣靜靜地躺著喳张,像睡著了一般。 火紅的嫁衣襯著肌膚如雪美澳。 梳的紋絲不亂的頭發(fā)上销部,一...
    開(kāi)封第一講書人閱讀 51,554評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音制跟,去河邊找鬼舅桩。 笑死,一個(gè)胖子當(dāng)著我的面吹牛雨膨,可吹牛的內(nèi)容都是我干的擂涛。 我是一名探鬼主播,決...
    沈念sama閱讀 40,302評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼聊记,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼撒妈!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起排监,我...
    開(kāi)封第一講書人閱讀 39,216評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤狰右,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后舆床,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體棋蚌,經(jīng)...
    沈念sama閱讀 45,661評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,851評(píng)論 3 336
  • 正文 我和宋清朗相戀三年挨队,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了附鸽。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,977評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡瞒瘸,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出熄浓,到底是詐尸還是另有隱情情臭,我是刑警寧澤,帶...
    沈念sama閱讀 35,697評(píng)論 5 347
  • 正文 年R本政府宣布赌蔑,位于F島的核電站俯在,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏娃惯。R本人自食惡果不足惜跷乐,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,306評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望趾浅。 院中可真熱鬧愕提,春花似錦馒稍、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,898評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至如输,卻和暖如春鼓黔,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背不见。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,019評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工澳化, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人稳吮。 一個(gè)月前我還...
    沈念sama閱讀 48,138評(píng)論 3 370
  • 正文 我出身青樓缎谷,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親盖高。 傳聞我的和親對(duì)象是個(gè)殘疾皇子慎陵,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,927評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • //gradle 下載慢 //可以直接下載gradle之后放在對(duì)應(yīng)的目錄里//或者修改 根目錄下的文件bul...
    zeromemcpy閱讀 885評(píng)論 0 0
  • 環(huán)信官方Demo源碼分析及SDK簡(jiǎn)單應(yīng)用 環(huán)信官方Demo源碼分析及SDK簡(jiǎn)單應(yīng)用-ChatDemoUI3.0 環(huán)...
    imGeek閱讀 1,554評(píng)論 0 3
  • (1)鬧鐘 創(chuàng)建鬧鐘(ACTION_SET_ALARM)示例Intent: 注:為了調(diào)用ACTION_SET_AL...
    sunnygarden閱讀 1,631評(píng)論 0 10
  • 目前搭載android6.0以上版本系統(tǒng)手機(jī)占有量將近三分之一,具體如下圖所示: 所以有必要將升級(jí)app的targ...
    flywfk閱讀 3,077評(píng)論 0 4
  • 本文重點(diǎn)介紹應(yīng)用程序的啟動(dòng)過(guò)程喻奥,應(yīng)用程序的啟動(dòng)過(guò)程實(shí)際上就是應(yīng)用程序中的默認(rèn)Activity的啟動(dòng)過(guò)程席纽,本文將詳細(xì)...
    天宇sonny閱讀 400評(píng)論 1 0