那么 - 草稿

//判断activity是否存在栈内
private boolean isExistActivity(Class<?> activity) {
    Intent intent = new Intent(getContext(), activity);
    ComponentName cmpName = intent.resolveActivity(getContext().getPackageManager());
    boolean flag = false;
    if (cmpName != null) {// 说明系统中存在这个activity
        ActivityManager am = (ActivityManager) getContext().getSystemService(ACTIVITY_SERVICE);
        List<ActivityManager.RunningTaskInfo> taskInfoList = am.getRunningTasks(10);//获取从栈顶开始往下查找的10个activity
        for (ActivityManager.RunningTaskInfo taskInfo : taskInfoList) {
            if (taskInfo.baseActivity.equals(cmpName)) {// 说明它已经启动了
                flag = true;
                break;//跳出循环,优化效率
            }
        }
    }
    return flag;//true 存在 falese 不存在
}

桌面快捷方式
添加权限:
<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");
//生成图标的名称
intent.putExtra(Intent.EXTRA_SHORTCUT_NAME, "你能");
//不允许重复创建
//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);
}}

打开其他应用
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();

// 动画旋转

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);// 重复次数
an.setFillAfter(true);// 停在最后
an.setDuration(4000);// 旋转一次的时间
tv.startAnimation(an);
系统分享
Intent shareIntent = new Intent(); shareIntent.setAction(Intent.ACTION_SEND);
去标题
super.onCreate(savedInstanceState);
requestWindowFeature ( Window.FEATURE_NO_TITLE );//取消标题

    getWindow ( ).setFlags ( WindowManager.LayoutParams.FLAG_FULLSCREEN, 
                            WindowManager.LayoutParams.FLAG_FULLSCREEN );//设置全屏
    
            Toast.makeText(MainActivity.this,"好东西要分享哦",Toast.LENGTH_SHORT).show();
                shareIntent.putExtra(Intent.EXTRA_TEXT,      " 哈喽快来找他要吧!");
                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)

{   //关机键 }

return true;

}

// 打开指定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) {
// //请求电池优化白名单
// 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) { //对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 表示我们需要什么权限
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打开安装未知来源
<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) { //系统 Android O及以上版本
//是否需要处理未知应用来源权限。 true为用户信任安装包安装 false 则需要获取授权
boolean canRequestPackageInstalls = getPackageManager().canRequestPackageInstalls();
if (canRequestPackageInstalls) {
installApk();
} else {
//请求安装未知应用来源的权限
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) { //如果已经有这个权限 则直接安装 否则跳转到授权界面
installApk();
} else {
Uri packageURI = Uri.parse("package:" + getPackageName()); //获取包名,直接跳转到对应App授权界面
Intent intent = new Intent(Settings.ACTION_MANAGE_UNKNOWN_APP_SOURCES, packageURI);
startActivityForResult(intent, GET_UNKNOWN_APP_SOURCES);
}
break;
}

  //我们还需要在 onActivityResult方法中继续做一些相应的处理,好让授权成功后 返回App可以直接安装
   @Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    //8.0 以上系统 强更新授权 界面
    switch (requestCode) {
        case GET_UNKNOWN_APP_SOURCES:
            checkAndroidO();
            break;
        default:
            break;
    }

}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,294评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,780评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,001评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,593评论 1 289
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,687评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,679评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,667评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,426评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,872评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,180评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,346评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,019评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,658评论 3 323
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,268评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,495评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,275评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,207评论 2 352

推荐阅读更多精彩内容

  • //gradle 下载慢 //可以直接下载gradle之后放在对应的目录里//或者修改 根目录下的文件bul...
    zeromemcpy阅读 884评论 0 0
  • 环信官方Demo源码分析及SDK简单应用 环信官方Demo源码分析及SDK简单应用-ChatDemoUI3.0 环...
    imGeek阅读 1,551评论 0 3
  • (1)闹钟 创建闹钟(ACTION_SET_ALARM)示例Intent: 注:为了调用ACTION_SET_AL...
    sunnygarden阅读 1,621评论 0 10
  • 目前搭载android6.0以上版本系统手机占有量将近三分之一,具体如下图所示: 所以有必要将升级app的targ...
    flywfk阅读 3,070评论 0 4
  • 本文重点介绍应用程序的启动过程,应用程序的启动过程实际上就是应用程序中的默认Activity的启动过程,本文将详细...
    天宇sonny阅读 398评论 1 0