我正在尝试使用 adb 和命令行模拟设备正在接收 GCM 推送消息。我尝试使用此命令来广播 GCM 意图:
adb shell am broadcast -c com.myapp -a com.google.android.c2dm.intent.RECEIVE -e data "SomeData"
这将触发一个“权限拒绝”日志行:
09-19 12:23:34.820 725-787/? W/BroadcastQueue﹕ Permission Denial: broadcasting Intent { act=com.google.android.c2dm.intent.RECEIVE cat=[com.myapp] flg=0x10 (has extras) } from null (pid=21244, uid=2000) requires com.google.android.c2dm.permission.SEND due to receiver com.myapp/com.google.android.gcm.GCMBroadcastReceiver
我的清单的相关部分:
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
<application>
<receiver
android:name="com.google.android.gcm.GCMBroadcastReceiver"
android:permission="com.google.android.c2dm.permission.SEND" >
<intent-filter>
<action android:name="com.google.android.c2dm.intent.RECEIVE" />
<action android:name="com.google.android.c2dm.intent.REGISTRATION" />
<category android:name="com.myapp" />
</intent-filter>
</receiver>
</application>
有什么想法吗?
编辑/澄清:推送/GCM接收生产中的作品。我正在寻找一种更简单的方法来测试更改。
我建议使用命令行curl,因为发送GCM推送就像调用一些REST API一样简单。请参见下面的示例shell脚本:
#!/bin/bash
REGISTRATION_ID=YOUR_GCM_REGISTRATION_ID
SERVER_KEY=YOUR_SERVER_KEY_FROM_GOOGLE_API_CONSOLE
curl --header "Authorization: key=$SERVER_KEY" --header Content-Type:"application/json" https://android.googleapis.com/gcm/send -d "{ \"data\" : {\"foo\": \"bar\"}, \"registration_ids\":[\"$REGISTRATION_ID\"] }"
比临时编辑 AndroidManifest 更好.xml删除权限检查,并记住稍后恢复它,您可以在调试版本中自动禁用权限检查。
为此,请通过清单合并占位符设置该属性:
<receiver
android:name="com.google.android.gcm.GCMBroadcastReceiver"
android:permission="${gcmPermissionRequired}">
然后在< code>build.gradle中设置占位符:
buildTypes {
debug {
...
manifestPlaceholders = [gcmPermissionRequired: ""] // "" => let the GCM BroadcastReceiver accept Intents from 'adb shell am broadcast'
}
release {
...
manifestPlaceholders = [gcmPermissionRequired: "com.google.android.c2dm.permission.SEND"]
}
}
(注意:以前我使用debug
您需要删除接收者定义中的权限属性,如下所示:
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
<application>
<receiver
android:name="com.google.android.gcm.GCMBroadcastReceiver" >
<intent-filter>
<action android:name="com.google.android.c2dm.intent.RECEIVE" />
<action android:name="com.google.android.c2dm.intent.REGISTRATION" />
<category android:name="com.myapp" />
</intent-filter>
</receiver>
</application>
问题内容: 我最近打算测试从python作为命令行参数运行phantomJS,我还不了解它,但是看到了例子。因为PhantomJS是从命令行运行的,所以这似乎是可行的。PhantomJS吐出的结果将直接进入变量。 在我走这条路之前,在node.js中进行这项工作实际上对我来说更有用,这让我开始思考,当程序从命令行运行并存储数据结果时,我是否可以使用node来运行PhantomJS PhantomJ
问题内容: 我在新安装的服务器中遇到了奇怪的情况,这次Google似乎帮不了我。我无法从我的PHP代码连接到(远程)mysql。当我尝试从同一服务器上的命令行连接时,连接成功。 无法连接:无法连接到“ MYSQL.SERVER”上的MySQL服务器(13) 这是代码和来自命令行的连接尝试 我尝试同时在mod_php模式和FastCGI中运行php脚本,检查phpinfo()以及mysql,mysq
假设我有一个叫“阿帕奇”的角色 现在我想从 Ansible 主机的命令行在主机 192.168.0.10 上执行该角色 有办法做到这一点吗?
好吧,我遇到了一个错误,我不太清楚为什么,希望您能提供帮助。当我尝试运行它时,会遇到以下问题。 线程“main”java中出现异常。util。java中的NoSuchElementException。util。扫描仪。java上的throwFor(Scanner.java:907)。util。扫描仪。下一步(Scanner.java:1530)在java。util。扫描仪。nextInt(Scan
问题内容: 在Mac上如何从命令行连接到MySQL?(即给我看代码) 我正在做一个PHP / SQL教程,但首先假设您已经在MySQL中。 问题答案: 看到这里http://dev.mysql.com/doc/refman/5.0/en/connecting.html 上面的选项表示: 查看链接,那里有详细的链接! 如Rick所述,您可以通过不这样传递密码来避免将密码作为命令的一部分传递: 编辑此
valgrind快速启动页面提到: 这将我引向这样一个问题:是否有充分的理由不在生产中从程序中消除这样的错误?发布包含此类错误的程序有什么好处吗?如果有,开发人员如何保护它的安全,尽管据我所知,包含此类错误的程序可以不可预测地运行,并且无法对其行为做出一般假设?如果是这样,你能提供真实世界的例子,说明程序运行时有这些错误比没有错误更好吗?