//判斷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;
}
}