小编Lan*_*ler的帖子

运行时推送通知(GCM)权限?

我已经读过,有必要在运行时向用户询问API 23及更高版本的某些权限.例如:android.permission.ACCESS_FINE_LOCATION.如果API为23或更高,是否有必要(甚至可能)要求在运行时使用GCM /推送通知的运行时权限?

我已经尝试requestPermissions在运行时使用该方法,但是当我将它与任何GCM /推送通知相关的权限一起使用时,它似乎不起作用(没有任何反应).

为此,我在我的Manifest中拥有以下权限:

<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE"/>
<permission
    android:name="${applicationId}.permission.C2D_MESSAGE"
    android:protectionLevel="signature"/>
Run Code Online (Sandbox Code Playgroud)

用户知道的唯一权限是ACCESS_FINE_LOCATION从Play商店下载应用程序的时间.用户不应该选择是否允许推送通知?

任何帮助将不胜感激.

android push-notification google-cloud-messaging android-permissions

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

使用eval从字符串计算数学表达式

我想从字符串中计算数学表达式.我已经读过,解决方法是使用eval().但是当我尝试运行以下代码时:

<?php

$ma ="2+10";
$p = eval($ma);
print $p;

?>
Run Code Online (Sandbox Code Playgroud)

它给了我以下错误:

解析错误:语法错误,意外的$ end在C:\ xampp\htdocs\eclipseWorkspaceWebDev\MandatoryHandinSite\tester.php(4):eval()'代码在第1行

有人知道这个问题的解决方案.

php math eval

21
推荐指数
4
解决办法
5万
查看次数

Big O - O(log(n))代码示例

像Big O符号"O(1)"可以描述以下代码:

O(1):

    for (int i = 0; i < 10; i++) {
        // do stuff 
        a[i] = INT;
    }

O(n):

    for (int i = 0; i < n; i++) {
        // do stuff 
        a[i] = INT;
    }

O(n^2):
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            // do stuff
            a[i][j] = INT;
        }
    }
Run Code Online (Sandbox Code Playgroud)
  • O(log(n))可以描述什么代码?

另一个问题:

  • "大O问题"有什么解决方案(当把大量数据作为输入时该怎么做)?

java algorithm big-o

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

Marshmallow(API Level 23)Firebase消息传递不起作用

我一直试图在我的应用程序中实现Firebase消息传递一段时间.我遵循了不同类型的教程,包括Firebase的官方教程,使用Firebase Assistant手动和自动添加.

出于某种原因,以下陈述是正确的:

  • 在扩展FirebaseInstanceIdService的类中的onTokenRefresh()是永远不会被调用的.
  • 在扩展FirebaseInstanceIdService的类中,onMessageReceived(remoteMessage:RemoteMessage?)永远不会被调用.
  • 没有收到任何消息

MyFirebaseInstanceIDService:

class MyFirebaseInstanceIDService : FirebaseInstanceIdService() {

    val TAG = javaClass?.simpleName

    override fun onTokenRefresh() {
        super.onTokenRefresh()
        val refreshedToken = FirebaseInstanceId.getInstance().token
        System.out.println("firebasedebug (" + TAG + "): onTokenRefresh(): " + refreshedToken)
    }
}
Run Code Online (Sandbox Code Playgroud)

MyFirebaseMessagingService

class : FirebaseMessagingService() {

    val TAG = javaClass?.simpleName

    override fun onMessageReceived(remoteMessage: RemoteMessage?) {
        super.onMessageReceived(remoteMessage)
        System.out.println("firebasedebug (" + TAG + "): onMessageReceived(remoteMessage: " + remoteMessage+")")
    }
}
Run Code Online (Sandbox Code Playgroud)

我已将以下内容添加到我的清单中:

<meta-data
    android:name="com.google.firebase.messaging.default_notification_channel_id"
    android:value="@string/default_notification_channel_id"/>

<service
    android:name="dk.myapp.service.firebase.MyFirebaseMessagingService"
    android:exported="false">
    <intent-filter>
        <action android:name="com.google.firebase.MESSAGING_EVENT"/>
    </intent-filter>
</service>

<service
    android:name="dk.myapp.service.firebase.MyFirebaseInstanceIDService"
    android:exported="false">
    <intent-filter> …
Run Code Online (Sandbox Code Playgroud)

android firebase firebase-cloud-messaging android-8.0-oreo

8
推荐指数
1
解决办法
1216
查看次数

上传到 Play 商店时“原生平台”减少,并警告“应用程序可用于在较少类型的设备上进行新安装”

当我将最新版本的原生 Android 应用上传到 Play 商店时,它首先给了我以下警告:

警告:停用此 APK 将导致您的应用可在更少类型的设备上进行新安装

我还是决定上传它,因为支持的设备数量和以前一样。

我觉得这有点奇怪,因为我没有改变我的“minSdkVersion”。我只向 1% 的用户发布了这个版本,大约有 1500 名用户。

我实际上不知道我是否应该担心,但我已经通过 AppCenter 监控了活动,我们已将其集成到应用程序中。而且我认为新版本的用户数量低得令人怀疑。在 Play 商店中有 0 次崩溃(虽然这可能是一件好事)。

此外,Play Store 中的“原生平台”一栏从 5 变为 4。此时我在此栏中有以下内容:“arm64-v8a、armeabi-v7a、x86、x86_64”

不幸的是,我无法再看到有关此的旧信息,因为我随后发布了另一个版本(错误修复)。但我认为是这样的:

1 区分:armeabi + 4 常见:differarm64-v8a、armeabi-v7a、x86、x86_64

这与能够下载应用程序的用户数量有关吗?我应该担心吗?

android google-play

6
推荐指数
1
解决办法
949
查看次数

java中的散列如何工作?

我试图在java中找出关于哈希的东西.例如,如果我想在hashmap中存储一些数据,它是否会有一些带有hashvalues的底层哈希表?或者,如果有人可以对哈希的工作方式做出一个简单明了的解释,我会非常感激.

java algorithm hash hashcode

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

在安卓设备和电脑(同一网络)之间使用套接字

我已经为此苦苦挣扎了一段时间。我只是想做的是在我的 android 应用程序和我的 PC 上的 java 程序之间创建一个套接字连接。

我都尝试过 UDP 和 TCP 套接字以及不同类型的 IP 和端口号。

那么,我怎样才能做到这一点?

这是我的(当前代码)与(尝试的)TCP 连接:

服务端代码截图(PC java程序):

try {

    DatagramSocket socket = new DatagramSocket(4466);
    byte[] buffer = new byte[2048];

    DatagramPacket packet = new DatagramPacket(buffer, buffer.length);
    socket.receive(packet);

} catch (SocketException e) {
  e.printStackTrace();
} catch (IOException e) {
  e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)

以及来自我的 android 应用程序(客户端)的相关片段:

try {

    InetAddress host = InetAddress.getByName("192.168.1.255");
    DatagramSocket socket = new DatagramSocket (null);
    byte[] buffer = new byte[2048];
    buffer = "hej hej".getBytes();

    DatagramPacket packet=new DatagramPacket (buffer, buffer.length, …
Run Code Online (Sandbox Code Playgroud)

java sockets networking android tcp

5
推荐指数
0
解决办法
6828
查看次数

使用Android应用程序中的文件和文本发出POST请求

我在从Android应用程序向我的Web服务(Google Cloud和PHP)发出正确的POST请求时遇到了一些问题.

当我尝试从Android发送图片时,它会返回"200 OK"响应,但图片不会保存在Google云端存储上的存储桶中.我知道问题在于Android应用程序中我的方法发出的POST请求,因为我已经使用Postman进行了测试并且没有任何问题.所以我的应用程序的下面一段代码出了问题:

public void uploadFile(String uploadUrl, String filename, String newFileName) throws IOException {
        FileInputStream fileInputStream = new FileInputStream(new File(filename));

        URL url = new URL(uploadUrl);
        connection = (HttpURLConnection) url.openConnection();

        // Allow Inputs &amp; Outputs.
        connection.setDoInput(true);
        connection.setDoOutput(true);
        connection.setUseCaches(false);

        // Set HTTP method to POST.
        connection.setRequestMethod("POST");
        connection.setRequestProperty("Connection", "Keep-Alive");
        connection.setRequestProperty("Content-Type", "multipart/form-data;boundary=" + boundary);

        outputStream = new DataOutputStream(connection.getOutputStream() );
        outputStream.writeBytes(twoHyphens + boundary + lineEnd);
        outputStream.writeBytes("Content-Disposition: form-data; name=\"img\";filename=\"" + filename + "\"" + lineEnd);
        outputStream.writeBytes(lineEnd);

        bytesAvailable = fileInputStream.available();
        bufferSize = Math.min(bytesAvailable, maxBufferSize);
        buffer = …
Run Code Online (Sandbox Code Playgroud)

php post android httpurlconnection

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

如何在画布上的2点之间绘制曲线?

我已经尝试了很多不同的方法来自网络上的例子,但我似乎无法让这个工作.我正在尝试制作一种在画布上的两点之间绘制曲线的方法.曲线应由radius参数定义.

以下是我目前的代码.

public OverlayBuilder drawCurvedArrow(int startX, int startY, int endX, int endY, int curveRadius, int padding, int color) {
    PointF mPoint1 = new PointF(startX, startY);
    PointF mPoint2 = new PointF(endX, endY);
    Paint paint  = new Paint();
    paint.setAntiAlias(true);
    paint.setStyle(Paint.Style.STROKE);
    paint.setStrokeWidth(12);
    paint.setColor(color);
    Path myPath = new Path();

    myPath.moveTo(startX, startY);
    myPath.quadTo(mPoint1.x, mPoint1.y, mPoint2.x, mPoint2.y);
    canvas.drawPath(myPath, paint);

    return this;
}
Run Code Online (Sandbox Code Playgroud)

编辑

问题是我无法弄清楚如何弯曲画布上绘制的线条.

android canvas paint

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

Android customAdapter(BasesAdapter)getView总是返回0

我为listview创建了一个customadapter,但由于某种原因,getView方法的参数"position"始终为0,这使得该方法毫无用处.

这是我的customAdapter的代码,扩展了BaseAdapter:

public class CreateProgramAdapter extends BaseAdapter {

    private LayoutInflater inflater;
    private ArrayList<TrainingPass> trainingPasses;
    private List<TrainingPass> items;
    private Context context;

    public CreateProgramAdapter(Context context, List<TrainingPass> items) {
        this.context = context;
        this.items = items;
        this.inflater = LayoutInflater.from(this.context);
    }

    @Override
    public int getCount() {
        return items.size();
    }

    @Override
    public TrainingPass getItem(int position) {
        return items.get(position);
    }

    @Override
    public long getItemId(int position) {
        return 0;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View view;
        TrainingPassHolder holder;

        if(convertView == null) { …
Run Code Online (Sandbox Code Playgroud)

android android-listview baseadapter custom-adapter getview

3
推荐指数
2
解决办法
3546
查看次数