美文网首页
那么 - 草稿

那么 - 草稿

作者: mahongyin | 来源:发表于2020-03-12 13:01 被阅读0次
    //判断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;
        }
    
    }

    相关文章

      网友评论

          本文标题:那么 - 草稿

          本文链接:https://www.haomeiwen.com/subject/ewrujhtx.html