小编Evg*_*tin的帖子

撤销权限android.permission.CALL_PHONE

我正在尝试以编程方式使用以下代码调用数字:

 String number = ("tel:" + numTxt.getText());
 Intent intent = new Intent(Intent.ACTION_CALL);
 intent.setData(Uri.parse(number));
 startActivity(intent);
Run Code Online (Sandbox Code Playgroud)

我在Manifest中设置了权限:

<uses-permission android:name="android.permission.CALL_PHONE"/>
Run Code Online (Sandbox Code Playgroud)

我正在使用真实设备进行测试和调试,它是带有Android M的Nexus 5,我的compileSdkVersion是23.我得到以下安全例外:

error: Permission Denial: starting Intent { act=android.intent.action.CALL dat=tel:xxxxxxxxxx cmp=com.android.server.telecom/.components.UserCallActivity } from ProcessRecord{cbbd7c1 5228:com.dialerTest.DialerApp/u0a96} (pid=5228, uid=10096) with revoked permission android.permission.CALL_PHONE
Run Code Online (Sandbox Code Playgroud)

我在网络和这个社区搜索了类似的问答,但找不到答案.任何帮助将不胜感激.

android android-intent android-permissions

19
推荐指数
3
解决办法
3万
查看次数

使用FileProvider从Gallery中选择图像文件

为Android N编译我遇到了一个问题FileProvider.我需要让用户从相册中选择图像/用相机拍照然后将其裁剪成方形.

我已经成功实现了FileProvider用相机拍摄图像,但是从图库中选择图像时遇到了严重的问题.问题是在库中有很多来自不同地方的文件,例如我有Exception:

  java.lang.IllegalArgumentException: Failed to find configured root that contains /storage/6133-3766/DCIM/100ANDRO/DSC_0035.JPG
Run Code Online (Sandbox Code Playgroud)

所以问题是,我可以把什么放到file_paths.xml来访问任何地方/storage/.我不能依赖于确切的路径,因为可能有来自WhatsApp和类似应用程序的图片,例如WhatsApp图像获取此路径:

/storage/emulated/0/WhatsApp/Media/WhatsApp Images/IMG-20160821-WA0000.jpg
Run Code Online (Sandbox Code Playgroud)

我已设法解决空路径:

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

其类似于Environment.getExternalStorageDirectory()根据文档.

但仍然无法弄清楚如何处理存储在其中的图像/storage/SOME_DIR/.请帮忙.

android android-gallery android-fileprovider

19
推荐指数
1
解决办法
5308
查看次数

来自非活动更改列表的文件已修改

我早上打开了我的项目,这一行显示在Gradleapp模块中.

有三个选项:Move changes,Save ChangelistIgnore.

有人知道什么是错的,我该怎么办?

java git android intellij-idea gradle

9
推荐指数
1
解决办法
5006
查看次数

Build.VERSION.SDK_INT在本地单元测试中的存根值

我想知道是否还有存根的价值Build.Version.SDK_INT?假设我在以下行中有以下几行ClassUnderTest:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
    //do work
}else{
    //do another work
}
Run Code Online (Sandbox Code Playgroud)

我怎样才能涵盖所有代码?

我的意思是我想用不同的SDK_INT运行两个测试来输入两个块.

有可能在android 本地单元测试中使用Mockito/ PowerMockito

谢谢

android unit-testing mockito powermock

9
推荐指数
3
解决办法
3475
查看次数

如何区分在托管配置文件和常规配置文件下运行的Android应用

Android 5.0(API级别21)允许企业设置托管配置文件.如果设备具有托管配置文件,则配置文件的设置由企业管理员控制.管理员可以选择允许该配置文件使用哪些应用,并且可以控制配置文件可用的设备功能.

假设我们在Google Play Market中有一个应用程序,并且一些客户也可以通过移动设备管理配置文件安装该应用程序.如何以编程方式区分这些应用程序版本?换句话说,如何确保特定应用程序版本由企业管理员(位于工作资料下)管理?提前致谢.

android mdm

9
推荐指数
1
解决办法
845
查看次数

从广播接收器android调用AsyncTask

所以当前我有一个AsyncTask类,当我点击一个按钮时,它运行和POST的数据到我的服务器(效果很好).

我现在尝试做的是处理用户未连接到互联网时发生的情况.所以我设置了这些类,以便在互联网连接时通知应用程序,以便数据可以自动发送到服务器.

AsyncTask类(内部类)

 private class HttpAsyncTask extends AsyncTask<String, Void, String> {

    ProgressDialog dialog = new ProgressDialog(getActivity());
    final AlertDialog finishedDialog = new AlertDialog.Builder(getActivity())
    .setCancelable(false)
    .setPositiveButton(android.R.string.ok, null)
    .create();



    @Override
    protected String doInBackground(String... urls) {
        onProgressUpdate("Uploading Data...");
        return POST(urls[0]);
    }

    @Override
    protected void onPreExecute() {
        this.dialog.show();
        finishedDialog.setOnShowListener(new DialogInterface.OnShowListener(){

            @Override
            public void onShow(DialogInterface dialog) {
                Button b = finishedDialog.getButton(AlertDialog.BUTTON_POSITIVE);
                b.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    // navigate to match summary.....
                    finishedDialog.dismiss();
                }

            });
            }

        });
    }

    protected void onProgressUpdate(String msg) { …
Run Code Online (Sandbox Code Playgroud)

java android broadcastreceiver android-asynctask

7
推荐指数
3
解决办法
1万
查看次数

工具栏中不允许使用相对布局

我正面临着奇怪的警告,试图自定义工具栏外观.我把RelativeLayout里面android.support.v7.widget.Toolbar重新组织起来Toolbar.一切正常,并且在仿真器和设备上都按预期显示.唯一的问题是出现在.xml文件中的恼人警告,如下所示:

警告的截图

问题是实际问题是什么,它如何损害我的应用程序以及如何解决此警告.据我所知Toolbar表现为ViewGroup,为什么RelativeLayout不允许是它的孩子?谢谢.

android android-layout android-relativelayout android-toolbar

5
推荐指数
1
解决办法
1923
查看次数

FragmentManager:moveToState:GridFragment {...}的片段状态未更新为内联; 预期状态1找到0

我有一个简单的Activity和Retained Fragment,就像Alex Lockwood的博客文章一样.

我的活动内容如下onCreate():

FragmentManager fm = getSupportFragmentManager();
    retainedFragment = (GridFragment) fm.findFragmentByTag(RETAINED_FRAGMENT_TAG);

    // If the Fragment is non-null, then it is currently being
    // retained across a configuration change.
    if (retainedFragment == null) {
        retainedFragment = new GridFragment();
        fm.beginTransaction().add(retainedFragment, RETAINED_FRAGMENT_TAG).commit();
    }else{
        list = retainedFragment.getList();
        System.out.println(list.size());//OUTPUT 12
    }
Run Code Online (Sandbox Code Playgroud)

我的Fragments' onAttach()是:

 @Override
public void onAttach(Context activity) {
    super.onAttach(activity);
    mCallbacks = (TaskCallbacks) activity;
    System.out.println("here"); //OUTPUT here
}
Run Code Online (Sandbox Code Playgroud)

现在,在每个屏幕旋转我都有非常奇怪的输出:

I/System.out:这里

W/FragmentManager:moveToState:GridFragment {95fc9db#0 retained_tag}的片段状态未内联更新; 预期状态1找到0

I/System.out:12

这个奇怪的警告来自我的输入之间?怎么处理呢?提前致谢!

android android-fragments

5
推荐指数
1
解决办法
9522
查看次数

如何从 Android 应用程序中的标头数据验证 Safety Net JWS 签名

我使用SafetyNet API检查设备是否已 root 并使用以下有用的代码,但这使用 Android 验证 API 来验证 JWT 签名:

https://github.com/scottyab/safetynethelper

我想在客户端进行验证只是为了减少另一个 Web 服务的开销,而且它每天只有 10k 请求的限制。

所以解码 JWS 后我得到以下信息

JWS 消息响应示例

xxxx.yyy.zzzz

标头数据

{"alg":"RS256","x5c":["<certificate1 string>","<certificate2 string>"]}
Run Code Online (Sandbox Code Playgroud)

有效载荷数据

{"nonce":"<nounce>",
"timestampMs":1472794339527,
"apkPackageName":"<apkPackageName>",
"apkDigestSha256":"<sha digest string>",
"ctsProfileMatch":true,
"extension":"<extension string>",
"apkCertificateDigestSha256":["<apkCertificateDigestSha256 string>"],"basicIntegrity":true}
Run Code Online (Sandbox Code Playgroud)

如果执行 Base64 解码,此部分中的签名将变得不可读,因此下面是 JWS 最后一个元素中收到的签名字符串

Gw09rv1aBbtd4Er7F5ww_3TT1mPRD5YouMkPkwnRXJq8XW_cxlO4428DHTJdD8Tbep-Iv3nrVRWt2t4pH1uSr2kJ9budQJuXqzOUhN93r2Hfk-UAKUYQYhp89_wOWjSCG4ySVHD4jc9S1HrZlngaUosocOmhN4SzLZN5o8BXyBdXkjhWwgArd4bcLhCWJzmxz5iZfkhDiAyeNRq09CeqjRx_plqAy8eR_OaI_2idZBNIGfd2KmLK_CKaeVjDxuC4BzJsIlVRiuLrvP362Wwhz4r1bHh8flmHr88nK99apP2jkQD2l7lPv8y5F3FN3DKhJ15CzHR6ZbiTOw1fUteifg
Run Code Online (Sandbox Code Playgroud)

现在根据谷歌

“验证兼容性检查响应:从 JWS 消息中提取 SSL 证书链。验证 SSL 证书链并使用 SSL 主机名匹配来验证叶证书是否颁发给主机名 attest.android.com。使用证书来验证JWS 消息的签名。”

我确实有证书字符串和签名,我应该如何验证 SSL 证书(该证书是第二个证书上的字符串和主机名匹配)以及如何验证签名。

我需要这方面的指导,剪断代码会非常有帮助。

java validation android cryptography jwt

5
推荐指数
1
解决办法
5662
查看次数

RestrictionManager getRestrictions()始终为空

我正在尝试使用MobileIron EMM为我的应用程序设置远程配置。我已经按照开发人员指南中的说明进行了所有操作:1.我设置了清单:

...
        <meta-data
            android:name="android.content.APP_RESTRICTIONS"
            android:resource="@xml/app_restrictions"/>
    </application>
Run Code Online (Sandbox Code Playgroud)

2.我已经描述了限制:

<?xml version="1.0" encoding="utf-8"?>
<restrictions xmlns:android="http://schemas.android.com/apk/res/android">
    <restriction
        android:title="@string/some_title"
        android:key="SOME_KEY"
        android:restrictionType="string"
        android:defaultValue="123"/>
</restrictions>
Run Code Online (Sandbox Code Playgroud)

3.我正在尝试接收以下内容:

RestrictionsManager manager = (RestrictionsManager) context.getSystemService(Context.RESTRICTIONS_SERVICE);
        Bundle b = manager.getApplicationRestrictions();
        if(b!=null){
            if(b.containsKey("SOME_KEY")) {
                return b.getString("SOME_KEY");
            }else{
                System.out.println("bundle is not null");
                for (String s: b.keySet()){
                    System.out.println("key in b is : " + s);
                }
                System.out.println(b.isEmpty() + " bundle is empty");
            }
        }else{
            System.out.println("Bundle is null");
        }
        return "";
    }
Run Code Online (Sandbox Code Playgroud)

我总是得到输出:

bundle is not null
true bundle is empty
Run Code Online (Sandbox Code Playgroud)

尽管我已为限制设置了默认值。为什么我至少没有获得限制的默认值?为什么我从未获得实际值(在服务器端,我已经使用MobileIron Cloud及其AppConnect配置设置了值)?尝试了几种设备。我想念什么?请帮忙。我的目标是为应用程序远程设置一些键值。

android mdm mobileiron android-restrictions

5
推荐指数
2
解决办法
1845
查看次数